![](/img/trans.png)
[英]I want to implement the predicate noDupl/2 in Prolog & have trouble with singleton variables
[英]Having trouble with predicate in Prolog
我試圖在Prolog中糾正一個謂詞,該謂詞接受一個項目,一個列表和一個數字,並檢查該項目是否在列表中達到該次數。 例如
count(7,[3,7],X).
將返回X=1
。
count(7,[3,7],1).
會返回true
這就是我到目前為止
count_occur(A,[0|B],D).
count_occur(A,[A|C],D) :- count_occur(A,C,D1), D is D1+1.
count_occur(A,[B|C],D) :- count_occur(A,C,D).
我對Prolog並不陌生,並且真的很難理解這種編程范例。
我想做的是查看列表中的第一項是否與傳入的值(A)相匹配,如果它確實使D遞增,然后再次對照列表的其余部分進行檢查。 無論如何,這就是我要用輕快的語言或其他語言做到的方式。 真的可以使用一些幫助,已經有一段時間了,但這並不是我想要的。
我目前沒有prolog可以對其進行測試,但是我會這樣嘗試:
count_occur(A, [], 0).
count_occur(A, [A|T], D):- count_occur(A, T, D1), D is D1 + 1.
count_occur(A, [B|T], D):- A \= B, count_occur(A, T, D).
這個想法是,如果列表為空,則每個元素出現0次。 其余的與您的幾乎一樣,因為我認為這是正確的。
唯一的區別是我添加了A \\= B
,這應該表示A \\neq B
我認為否則它將接受A == B
,這可能會導致count_occur(3, [3], 0).
是真的。 您應該檢查一下。
我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.