首先,我完全是Prolog的初學者。比較一個列表的元素與序言中另一個列表的元素
我想比較列表中的每個元素與另一個列表中的每個元素。通過比較,我的意思是將這兩個元素髮送給我寫的謂詞(衝突)。到目前爲止,我得到這個:
%iterate over the first list
cmp_list([],_,_).
cmp_list([X|Y],[A|B],Result):-
cmp_list_inner(X,[A|B],Result),
cmp_list(Y,[A|B],Result).
%iterate over the second list
cmp_list_inner(_,[],_).
cmp_list_inner(X,[A|B],S):-
not(conflicts(X,A)), %compare
cmp_list_inner(X,B,[X-A|S]).%if okay, add their combination, i.e X-A to the main list which will be returned
謂詞cmp_list代表外列表的遞歸,而一個有內代表內部列表。 cmp_list(firstlist,secondlist,將返回組合後的新列表。)
這不行!即使它將第一個值中的單個元素的值添加到主列表中,它也不會將第二個比較(對於第一個列表中的第二個元素)附加到將返回的主列表中。結果應採用以下形式: [X1-Y1],[X1-Y2],[X2-Y1],[X2-Y2] ....其中Xs來自第一個列表,Ys來自第二個列表。
任何幫助,將不勝感激。謝謝!
謝謝!結果應該像[X1-Y3],[X2-Y4],[X5-Y1]等 其中Xs在list1中,Ys在list2中。它應該是非衝突對的列表,而對則是list1的元素和list2的元素的組合。你的解決方案不是按索引檢查索引嗎?我試圖比較X1與Y1,Y2,Y3 .. X2與Y1,Y2,Y3 ...等 – user3450161
我的意思是,它應該不會失敗,如果列表是不同的長度。 – user3450161
@ user3450161你想讓它捕捉所有匹配的內容,並忽略那些不匹配的內容嗎? – lurker