有人可以幫助我將其轉換爲符合此更新的要求嗎?SWI-Prolog謂詞示例第2部分
定義謂詞
strikeDuplicates(X,Y)
其成功,當且僅列表Y
將 被如果一個人從列表中刪除X
每個元素 的第二和後續出現獲得。 (您可能讀strikeDuplicates (X,Y)
爲列表X
沒有重複 是列表Y
。)時X
是 綁定變量strikeDuplicates/2
謂詞不必工作。
我問過類似的問題,前兩天問這個:
定義謂詞
strike(X,Y,Z)
是成功的,當且僅當列表Z
將獲得 如果一個人刪除元素X
的所有出現從列表Y
。當Y
是未綁定變量時,謂詞不需要很好地工作。
沒有人幫助我,所以我必須自己做。這個問題的答案是這樣的:
strike(_ , [] , [] ) .
strike(X , [X|T] , Z ) :- strike(X,T,Z) .
strike(X , [A|T] , [A|Z]) :- dif(X,A) , strike(X,T,Z) .
dif(X,A).
你嘗試過什麼嗎? – Rubens
你對輔助謂詞'dif/2'的定義是錯誤的。例如,'dif(1,1)'是真的。您可以通過調用標準術語相等謂詞'(\ ==)/ 2'來替換它。 –