序言。递归函数返回多个值

时间:2010-05-30 19:14:02

标签: prolog

我是Prolog的新手。我需要声明一个查看列表的函数 [[1,0,0],[1,0,0],[1,0,0]] 如果值为0则返回其地址(将其视为双数组)。

我基本上以以下格式编写了一个函数: 功能(......,X): -    函数(由其他值调用)。

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

1 个答案:

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

我没有尝试代码,因此您可能需要做一些小的修正,但它应该让您大致了解实现的外观。