斐波纳契在prolog中实现

时间:2013-04-22 21:55:52

标签: prolog fibonacci

我正在尝试自己实施斐波纳契序列。这就是我所拥有的:

fibo2(N, F) :-
    fibo2(0, 1, 0, N, F).

fibo2(N-F, F, N-1, N, F).

fibo2(P, S, C, N, F) :-
    C < N,
    T is S,
    S1 is P + S,
    C1 is C + 1,
    fibo2(T, S1, C1, N, F).

我知道还有其他实现,但我不知道为什么这不起作用。当我使用fibo2(3, 2)进行跟踪时,我认为此调用应该成立:

fibo2(1, 2, 2, 3, 2) ? creep

但它返回错误......一些帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

首先,T is S行无用。如果您不需要执行算术,则更喜欢使用(=)/2标准统一。在这里,您可以直接致电fibo2(S, S1, C1, N, F)

然后,您的递归没有基本情况。 fibo2/5的第一个条款在这里永远不会成立。

你的意思是:

fibo2(P, S, C, N, F) :-
    P is N - F,
    S is F,
    C is N - 1.

这里将执行算术(当在头部进行统一时,不执行算术,操作完全是符号化的。)

我不确定您的NF代表什么,所以我不会进一步评论您的代码,但这应该已经解决了一些问题。