2010-05-30 224 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). 

我沒有嘗試的代碼,所以你可能需要做一些小的修改,但它應該給你的實現可能看起來怎麼樣的總體思路。