我正在努力理解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行甚至会发生?它在做什么?我写了这个程序而没有看到答案,我在第二行之后完成了.当然,它不会工作.
另一方面,为什么在那里发生"切割"?比如,我一直试图在每次通话后打印出结果,我只是越来越困惑.