之前嘗試過,但對我來說仍然是一團糟。認爲這是最長的後繼,但實際上並非如此。所以寫更好的例子。我正在嘗試編寫一個Prolog謂詞來比較兩個字符串,以查看它們是否具有相同的元素並將它們打印出來(每個成員只能打印一次)。目前我已經寫了這個以將字符串分成兩個不同的列表以便於檢查:Prolog中兩個字符串的交集
但是,我無法找到正確的方法來比較這兩個列表中的每個元素,無論它們在哪裏。我找到了比較方法,直到它找到一個,它返回true,但我需要它來比較兩個列表中的每個元素並輸出它們。我知道這與頭和做比較,然後添加下一個第一個名單成員作爲新的頭等,但我不知道一個辦法做到這一點。此外,交點還是做我所需要的,但它給了我每一個元素(甚至多重時間)。我需要它在找到匹配元素後停下來,以便它只發現一次。
plates(X,Y,Mem,Num):-
atom_chars(X,Xs),
atom_chars(Y,Ys),
compare_list(Xs,Ys,Mem),
length(Mem,Num).
compare_list([], _, []).
compare_list([H1|T1], L, R) :-
(check_element(H1, L)
->R = [H1|R]
;R = R
),
compare_list(T1, L, R).
check_element(_, []).
check_element(X, [H|T]) :-
X = H,
check_element(X, T).
例1:
?-plates('111AXB','112XXX', Mem, Num).
應該輸出:
Mem = ['1','1','X'],
Num = 3.
例2:
?-plates('456XYZ','678ABC', Mem, Num).
應該輸出:
Mem = ['6'],
Num = 1.
我想在這裏實現解決方案: PROLOG Comparing 2 lists
我的測試:
?- plates('ABC123','123ABC',Mem,Num).
我的輸出:
Mem = [],
Num = 0.
預期:
Mem = ['A', 'B', 'C', '1', '2', '3'],
Num = 6.
但我無法得到它的工作我想它...... 任何幫助將是非常讚賞的方式!
隨着期望的輸出,還可以添加代碼的輸出 –
所以在最後一個例子,什麼是你所期望的輸出? – 2016-10-11 04:01:46
添加了示例 – Alsar