用SICStus Prolog推广Fibonacci序列

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)

......但这似乎不起作用.

这种方式不可能定义初始数字,还是我做了一些非常错误的事情?我不是要求解决方案,但任何可以帮助我解决这个问题的建议都将非常感激.

ony*_*ony 6

在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)