0
我是Prolog中的新成员。我需要声明一个函数,它查看 [[1,0,0],[1,0,0],[1,0,0]] 这样的列表,如果值为0,则返回其地址(由认为它是一个双数组)。prolog。递归函数返回多个值
我写了一个基本功能的函数: 函数(...,X): - 函数(由其他值调用)。
我该如何编写一个函数,它在每次调用时都会返回一个值(递归)。我可以得到他们(在上面的问题)作为替代X的?
我是Prolog中的新成员。我需要声明一个函数,它查看 [[1,0,0],[1,0,0],[1,0,0]] 这样的列表,如果值为0,则返回其地址(由认为它是一个双数组)。prolog。递归函数返回多个值
我写了一个基本功能的函数: 函数(...,X): - 函数(由其他值调用)。
我该如何编写一个函数,它在每次调用时都会返回一个值(递归)。我可以得到他们(在上面的问题)作为替代X的?
您需要编写一个遍历列表的函数,并生成一个包含索引的单个列表作为结果。你的例子中的结果就像[[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).
我没有尝试的代码,所以你可能需要做一些小的修改,但它应该给你的实现可能看起来怎么样的总体思路。