我對Prolog有點新鮮。我試圖編寫一個函數子集(Set,Subset)來確定Subset是否是Set(duh)的一個子集。另外,如果第二個參數沒有實例化,它應該輸出每個可能的子集。現在,它適用於兩個參數都被實例化的時候,但是當我試圖輸出所有的子集時,它會遇到成員/ 2的問題。例如:Prolog - 子集
?- subset([1,2,3], S).
S = [];
S = [1];
S = [1, 1];
S = [1, 1, 1];
...
這裏是我的代碼:
% subset/2
% subset(Set, Subset) iff Subset is a subset of Set
subset(_, []).
subset(Set, [H|T]) :-
member(H, Set),
subset(Set, T).
基本上,我怎麼讓這個成員不保持在採摘設置的第一個選項?提前致謝。
「(duh)」:有這樣一個名字是相當混亂的:考慮'set_subset(Set,Subset)'代替。 – false 2014-11-22 22:28:44
請注意,您的評論中的'iff'不準確,因爲'Set = any,Subset = []'等等。相反,簡單說'if' – false 2014-11-22 22:51:18
當然「iff」是正確的!如果它不是「iff」而只是一個「if」,並且因爲例如[1]不是[]的一個子集,我們會得到一個不完整的規範,並且謂詞將被允許在這種失敗情況下成功。爲了在操作上捕獲成功和失敗,你需要一個「iff」。 – 2017-06-04 13:19:15