我正在尝试创建一个 Prolog 程序来解决循环方程:
f(1)=2, f(2)=5, f(n)=f(n-1)+2*f(n-2)
我使用下面的rec函数进行了管理,但是当我想将结果存储在列表中时(通过函数recList)我遇到了麻烦。
这是我的实现:
rec(1,2).
rec(2,5).
rec(X,N) :- X1 is X-1, X2 is X-2, rec(X1,N1), rec(X2,N2), N is N1+2*N2.
recList(0,[]).
recList(X,[N|L]) :- rec(X,N), X1 is X-1, recList(X1,L).
我的 recList 实现适用于通过第一个值调用它
?- recList(4,X).
->
X = [19, 9, 5, 2] .
但如果它比两个元素长,当我用第二个调用它时它不会:
?- rekurList(X,[2]).
X = 1 .
?- rekurList(X,[5,2]).
X = 2 .
?- rekurList(X,[9,5,2]).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [9] rec(_12587334,9)
ERROR: [8] rekurList(_12587360,[9,5|...]) at /locaiton/rec.pl:6
ERROR: [7] <user>
请问有什么问题吗?