[英]Take out first elements from nested lists in Prolog
問題:我需要通過僅從第一個列表中的每個子列表中獲取第一個項目來將這個列表: [[1,2],[3,4],[5,6]]
為[1,3,5]
並與他們一起創建新列表。 語言是SWI-Prolog 。
我的解決方案 :為此,我編寫了以下代碼:
getFirstItems([], Result).
getFirstItems([H|T], Result) :-
[H2|T2] = H,
append(Result,H2,Result2),
getFirstItems(T, Result2).
問題 :但這在尾部始終等於[[5,6]]
時無法無限遞歸
問題 :如何解決此問題並正確解決此問題?
您使事情變得過於復雜。 您需要以聲明性的思維方式進行推理,從而實現列表列表和第一個元素列表之間的關系 。
這是一個解決方案:
first_items([], []).
first_items([[H|_]|T], [H|T2]) :-
first_items(T, T2).
確實,我們需要說明的唯一兩件事是:
H
在第一個元素的列表中,后面是列表的其余列表( T
)中的第一個元素( T2
)。 查詢示例:
?- first_items([[1,2],[3,4],[5,6]], Z).
Z = [1, 3, 5].
?- first_items(L, [1,3,4]).
L = [[1|_22058], [3|_22070], [4|_22082]].
?- first_items(L, Z).
L = Z, Z = [] ;
L = [[_22048|_22050]],
Z = [_22048] ;
L = [[_22048|_22050], [_22066|_22068]],
Z = [_22048, _22066]
…
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.