我是Prolog的初学者,我想要帮助 这个仿函数计算一个数字的斐波纳契...第一次它加Y = 0和Z = 1然后它自己调用Y = Z和Z = Y + Z并且每次它递增计数器C的值直到计数器等于X ..... 问题是结果始终等于1,因为prolog从不执行第二个子句,即使X不等于M但我不知道为什么......
X:要计算的斐波那契
Y:斐波那契系列中的第一个数字
Z:斐波那契系列中的第二个数字
C:以0作为初始值的计数器
T:Y + Z
predicates
fib_tail(integer,integer, integer,integer, real)
clauses
fib_tail(X,Y , Z,M, T):- X=M,T = Y + Z,!.
fib_tail(X,Y ,Z, C , T):-
T = Y + Z,
NY = Z,
NZ = Y + Z,
NC = C + 1,
fib_tail(X, NY, NZ, NC, NT).
goal
fib_tail(5 ,0 ,1 ,0, T)
答案 0 :(得分:3)
你的第二个条款fib_tail有两个缺陷:
编辑注释突出显示X不需要递增,与正确递增的C进行比较。
我认为你应该在尝试实现双重递归定义之前,并且当它正在工作时优化去除昂贵的调用。