2010-05-30 166 views
0

我是Prolog中的新成员。我需要声明一个函数,它查看 [[1,0,0],[1,0,0],[1,0,0]] 这样的列表,如果值为0,则返回其地址(由认为它是一个双数组)。prolog。递归函数返回多个值

我写了一个基本功能的函数: 函数(...,X): - 函数(由其他值调用)。

我该如何编写一个函数,它在每次调用时都会返回一个值(递归)。我可以得到他们(在上面的问题)作为替代X的?

回答

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). 

我没有尝试的代码,所以你可能需要做一些小的修改,但它应该给你的实现可能看起来怎么样的总体思路。