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