使用 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].
我只是稍微摆弄一下 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].