首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Prolog生成Lucas/fibonacci序列列表

用Prolog生成Lucas/fibonacci序列列表
EN

Stack Overflow用户
提问于 2020-10-07 09:02:59
回答 1查看 209关注 0票数 1

我只是在摆弄一下prolog,我遇到了一个我不知道如何解决的问题。我想创建一个返回中给定数字的Lucas sequence的过程。我已经得到了返回实际数字的代码,但它就是这样做的,返回数字的Lucas值。我想要的是返回一个列表,其中包含到该列表为止的所有Lucas序列号。我一直在尝试这样做,但我不知道如何实现它。下面是我的尝试。任何帮助都将非常感谢!

代码语言:javascript
复制
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). 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 22:30:57

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

代码语言:javascript
复制
% 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数序列:

代码语言:javascript
复制
?- seq(5, R).
R = [2, 1, 3, 4, 7, 11].
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64235765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档