Chr*_*man 4 prolog fibonacci sicstus-prolog clpfd
我正在尝试找到一个关于广义Fibonacci序列(GFS)的查询的解决方案.查询是:是否有任何GFS有885作为他们的第12个数字?最初的2个数字可以限制在1到10之间.
我已经找到了在序列中找到第N个数字的解决方案,该序列从(1,1)开始,我明确定义了初始数字.以下是我对此的看法:
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.
Run Code Online (Sandbox Code Playgroud)
对于上面提到的查询,我认为以下方法可以解决这个问题,我将重用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).
Run Code Online (Sandbox Code Playgroud)
......但这似乎不起作用.
这种方式不可能定义初始数字,还是我做了一些非常错误的事情?我不是要求解决方案,但任何可以帮助我解决这个问题的建议都将非常感激.
在SWI-Prolog下:
:- use_module(library(clpfd)).
fib(A,B,N,X):-
N #> 0,
N0 #= N-1,
C #= A+B,
fib(B,C,N0,X).
fib(A,B,0,A).
task(A,B):-
A in 1..10,
B in 1..10,
fib(A,B,11,885).
Run Code Online (Sandbox Code Playgroud)