0

フィボナッチ数列を独自に実装しようとしています。これは私が持っているものです:

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)この呼び出しは true をスローするはずだと思います:

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

しかし、それはfalseを返します...いくつかの助けをいただければ幸いです

4

1 に答える 1

1

まず、このT is S行は何の役にも立ちません。演算を実行する必要がない場合は、 との標準的な統一を使用することをお勧めします(=)/2。ここでは、 を直接呼び出すことができますfibo2(S, S1, C1, N, F)

次に、再帰には基本ケースがありません。willの最初の節は、fibo2/5ここでは真になりません。

あなたは確かに意味しました:

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

ここで算術が行われます(頭の中で統一を行う場合、算術は行われず、操作は完全に記号的です)。

あなたのNandが何をF表しているのかわからないので、コードにこれ以上コメントすることはしませんが、すでにいくつかの問題は解決しているはずです。

于 2013-04-22T23:42:14.630 に答える