在Prolog中使用1个参数创建斐波那契序列

在Prolog中使用1个参数创建斐波那契序列,prolog,fibonacci,Prolog,Fibonacci,我是prolog的初学者,正在尝试创建斐波那契序列规则。但它无法运行,因为名为算术fib的代码中存在错误。fib不是一个函数 我的代码的来源: fib(N):- N<1, S is 0, N<2, S is 1, N1 is fib(N-1), N2 is fib(N-2), S is N1 + N2, write(S, " "). 提前谢谢你的帮助 fib(0,0). fib(1,1). fib(N,R):- N>1,

我是prolog的初学者,正在尝试创建斐波那契序列规则。但它无法运行,因为名为算术fib的代码中存在错误。fib不是一个函数

我的代码的来源:

fib(N):-
    N<1, S is 0,
    N<2, S is 1,
    N1 is fib(N-1),
    N2 is fib(N-2),
    S is N1 + N2,
    write(S, " ").
提前谢谢你的帮助

fib(0,0).
fib(1,1).

fib(N,R):- N>1,
           N1 is N-1,
           N2 is N-2,
           fib(N1,R1),
           fib(N2,R2),
           R is R1+R2.
这就是如何使用prolog定义fibonacci,我定义了两种基本情况,其中元素n0是0,元素n1是1

然后我确定了任何不等于0或1的元素为Fn-1+Fn-2

要调用谓词,只需

?- fib(6,X).
您希望X得到结果的地方

本案的结果将是

X = 8 

你知道Prolog是一种逻辑编程语言。表示谓词成功或失败,它不返回值。此外,您不能在Prolog中重新分配变量。它们被实例化,并且只能在谓词子句的执行中执行一次,除非由于失败而发生回溯。因此,例如,如果N<1成功,那么S is 0将用算术计算值0实例化S,然后N<2将成功,然后S is 1将失败,因为S用0实例化,0 is 1为false。在编写程序之前,您需要阅读一本Prolog教程或基本教科书,并了解一些有关Prolog的知识。您确实应该使用N>1,而不是N\=0,N\=1。否则,fib-1,X将溢出堆栈,并且不会简单地失败。