1

我只是在摆弄序言,我遇到了一个我不知道如何解决的问题。我想创建一个返回给定数字 In的Lucas 序列的过程。我已经得到了返回实际数字的代码,但它就是这样做的,返回数字 In 的 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). 
4

1 回答 1

2

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

% 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].
于 2020-10-07T14:30:57.497 回答