小编use*_*841的帖子

在Prolog中丢弃

我正在努力理解Prolog中的递归,但它肯定与其他语言中的递归不同(我使用PHP,Java和C,只是说).

所以,是的,我一直在阅读有关它的所有教程,但我仍然没有得到具体的,相当复杂的案例.

例如,为了获得列表中元素的出现次数,我们有:

occurrence([], _, 0).
occurrence([H | T], H, N) :- !, occurrence(T, H, N1), N is N1 + 1.
occurrence([_ | T], H, N) :- occurrence(T, H, N).
Run Code Online (Sandbox Code Playgroud)

可以使用以下方式调用:

occurrence([1,4,9,1,2],1,R).
Run Code Online (Sandbox Code Playgroud)

它应该导致:

?- R=2
Run Code Online (Sandbox Code Playgroud)

现在,为什么第3行甚至会发生?它在做什么?我写了这个程序而没有看到答案,我在第二行之后完成了.当然,它不会工作.

另一方面,为什么在那里发生"切割"?比如,我一直试图在每次通话后打印出结果,我只是越来越困惑.

recursion prolog

0
推荐指数
1
解决办法
72
查看次数

标签 统计

prolog ×1

recursion ×1