我只是在摆弄一下prolog,我遇到了一个我不知道如何解决的问题。我想创建一个返回中给定数字的Lucas sequence的过程。我已经得到了返回实际数字的代码,但它就是这样做的,返回数字的Lucas值。我想要的是返回一个列表,其中包含到该列表为止的所有Lucas序列号。我一直在尝试这样做,但我不知道如何实现它。下面是我的尝试。任何帮助都将非常感谢!
lucas(0,[2]).
lucas(1,[2,1]).
lucas(In,Exit):-
In>1,
First is In-1, Second is In-2,
lucas(First, First1),lucas(Second,Second1),
[Out] is First1+Second1,
Lucas(1,L),
app([L],Out,Exit). 发布于 2020-10-07 22:30:57
一个简单的解决方案是定义Lucas数,然后生成Lucas数的列表:
% Definition of Lucas numbers according to Wikipedia
lucas(0, 2) :- !.
lucas(1, 1) :- !.
lucas(N, R) :-
N > 1,
N_Pre is N - 1,
N_PrePre is N - 2,
lucas(N_Pre, LHS),
lucas(N_PrePre, RHS),
R is LHS + RHS.
% Memoization of Lucas numbers
:- table lucas/2.
% Generate List
seq(M, Result) :-
numlist(0, M, List),
maplist(lucas, List, Result).如果我调用seq,它会产生一个Lucas数序列:
?- seq(5, R).
R = [2, 1, 3, 4, 7, 11].https://stackoverflow.com/questions/64235765
复制相似问题