在Prolog中使用1个参数创建斐波那契序列
我是prolog的初学者,正在尝试创建斐波那契序列规则。但它无法运行,因为名为算术fib的代码中存在错误。fib不是一个函数 我的代码的来源:在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,
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将溢出堆栈,并且不会简单地失败。