使用 Prolog 生成 Lucas/fibonacci 序列的列表

Produce a list of Lucas/fibonacci sequence with Prolog

我只是稍微摆弄一下 prolog,我遇到了一个我不知道如何解决的问题。我想创建一个 returns 给定数字 In 的 Lucas sequence 的过程。我已经得到了 return 实际数字的代码,但它就是这样做的,return 数字 In 的 Lucas 值。我想要的是 return 一个列表,其中包含直到该序列号的所有卢卡斯序列号。我一直在努力做到这一点,但我不知道如何实施。以下是我的尝试。任何帮助将不胜感激!!!

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

一个简单的解决方案是定义卢卡斯数,然后生成一个卢卡斯数列表:

% 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,它会生成一个卢卡斯数序列:

?- seq(5, R).
R = [2, 1, 3, 4, 7, 11].