![](/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.