繁体   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