我是Prolog的新手。我需要声明一个查看列表的函数 [[1,0,0],[1,0,0],[1,0,0]] 如果值为0则返回其地址(将其视为双数组)。
我基本上以以下格式编写了一个函数: 功能(......,X): - 函数(由其他值调用)。
如何编写一个函数,每次调用时都会返回一个值(递归)。我可以将它们(在上面的问题中)作为替代X吗?
答案 0 :(得分:1)
您需要编写一个遍历列表列表的函数,并生成一个包含索引的列表作为结果。您的示例中的结果类似于[[0, 0], [0, 1], ...]
。
为此,您需要在两个操作之间拆分函数 - 一个遍历单行(嵌套列表),另一个处理外部列表(包含列表作为行)。处理[1, 0, 0]
的嵌套函数看起来像这样(注意它需要从外部函数获取行的索引,以便它可以生成x,y坐标):
% Processes single row of the data. Parameters:
% row (in), row index (in), current element index (in), result (out)
processRow([], _, _, []).
processRow([1|Xs], R, N, Rest) :- processRow(Xs, R, N+1, Rest)
processRow([0|Xs], R, N, [[R, N]|Rest]) :- processRow(Xs, R, N+1, Rest)
第二个功能大致如下:
% Parameters:
% list of lists (input), current index (input), collected indices (output)
processOuter([], _, []).
processOuter([Row|Rows], N, [Res|Remaining]) :-
processRow(Row, N, 0, Res),
processOuter(Rows, N+1, Remaining).
我没有尝试代码,因此您可能需要做一些小的修正,但它应该让您大致了解实现的外观。