我正在尝试为 fibonacci series.This 代码编写一个 prolog 程序,代码进入无限循环。有人能告诉我错误是什么吗?

I am trying to write a prolog program for fibbonaci series.This code is going in infinite loop .Can someone tell what's the error?

fib(0,0).   
fib(1,1).  
fib(A,Result):-    
    fib(A-1,R),  
    fib(A-2,P),  
    Result is R+P.

当你做fib(A-1,R)时,比如A=4,发送的是4-1而不是3,你需要做Aminus1 is A -1, fib(Aminus1,R)。同A-2

要了解原因,首先缩小未终止的原因。这是程序中仍在循环的最小部分:

fib(0,0) :- false.
fib(1,1) :- false.
fib(A,Result):-    
    fib(A-1,R), false,
    fib(A-2,P),  
    Result is R+P.

无论参数是什么,这个程序都会循环。因此您的原始程序也会循环。

要解决此问题,您需要更改可见部分:您需要确保 A > 1。以这种方式,程序现在终止。

此外,正如@andsanmar 正确指出的那样,单独的 A-1 不是数字,而只是术语 -(A,1),因此它永远不可能是 0 也不会是 1 .所以要么写

fib(N,0) :- N =:= 0.
fib(N,1) :- N =:= 1.
...

或按照@andsanmar 的建议添加(is)/2

有关如何缩小未终止原因的更多信息,请参阅