一般化されたフィボナッチ数列 (GFS) に対するクエリの解決策を見つけようとしています。クエリは次のとおりです。12 番目の数字が 885 である GFS はありますか? 最初の 2 つの数字は 1 ~ 10 の間で制限される場合があります。
(1, 1) で始まるシーケンスで N 番目の数値を見つけるための解決策を既に見つけました。ここで、最初の数値を明示的に定義します。これが私がこれのために持っているものです:
fib(1, 1).
fib(2, 1).
fib(N, X) :-
N #> 1,
Nmin1 #= N - 1,
Nmin2 #= N - 2,
fib(Nmin1, Xmin1),
fib(Nmin2, Xmin2),
X #= Xmin1 + Xmin2.
前述のクエリについては、動的に実行する必要があるため、初期番号を明示的に定義せずに fib メソッドを再利用する次の方法でうまくいくと思いました。
fib(N, X) :-
N #> 1,
Nmin1 #= N - 1,
Nmin2 #= N - 2,
fib(Nmin1, Xmin1),
fib(Nmin2, Xmin2),
X #= Xmin1 + Xmin2.
fib2 :-
X1 in 1..10,
X2 in 1..10,
fib(1, X1),
fib(2, X2),
fib(12, 885).
...しかし、これはうまくいかないようです。
この方法で初期数を定義することはできませんか、それとも何かひどく間違っていますか? 解決策を求めているわけではありませんが、これを解決するのに役立つアドバイスをいただければ幸いです。