首页 文章

在Prolog中遇到谓词问题

提问于
浏览
1

我试图在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 回答

  • 1

    我现在没有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). 成立 . 你应该检查一下 .

    我希望这有帮助!

相关问题