簡體   English   中英

在Prolog中遇到謂詞問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM