我试图在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并再次检查列表的其余部分 . 这就是我用lisp或其他语言做的方式 . 可以真正使用一些帮助,已经有一段时间了,它只是没有点击给我 .
1 回答
我现在没有prolog来测试它,但我会这样尝试:
我们的想法是,如果列表为空,则每个元素都会出现0次 . 其余几乎与你的相同,因为我认为它是正确的 .
唯一的区别是我添加了
A \= B
,这应该是A \neq B
. 我认为否则它会接受A == B
,这可能导致count_occur(3, [3], 0).
成立 . 你应该检查一下 .我希望这有帮助!