首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Lisp语言制作Lucas级数

用Lisp语言制作Lucas级数
EN

Stack Overflow用户
提问于 2020-10-29 09:49:00
回答 1查看 184关注 0票数 1

我刚刚开始使用LISP,我正在尝试编写一个函数来生成给定数字k的Lucas数列。最终,我想让这个函数返回到这个数字之前的所有Lucas数的列表,但现在我想得到Lucas数的实际计算。我遇到了一个我不知道如何克服的问题,我试图让函数在0处返回2,在1处返回1,依此类推,但我一直遇到以下错误:

我不知道为什么会这样。请在我的代码下面找到,任何反馈/帮助都将非常感谢,以及实现返回导致输入数字的所有Lucas数字列表的任何提示。提前感谢大家!

编辑: error message is >Error(s),warning(S):*- READ from#:对象不能以#开头)

代码为:

代码语言:javascript
复制
(defun lucas (k)
(if (= k 0))
    2 
(if (= k 1)) 
    k
(+ (lucas (- k 1)) (lucas (- k 2))))) 


(print (lucas 0))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 10:30:20

发布的代码中有一个放错了位置的圆括号,以及一个过多的闭括号。正确的缩进显示了问题:

代码语言:javascript
复制
(defun lucas (k)
  (if (= k 0))
  2
  (if (= k 1))
  k
  (+ (lucas (- k 1)) (lucas (- k 2))))

在这里,在if语句中的测试之后没有要计算的表达式。相反,如果为(= k 0),则应计算2,否则应计算第二个if语句:

代码语言:javascript
复制
(defun lucas (k)
  (if (= k 0)
      2
      (if (= k 1)
          k
          (+ (lucas (- k 1)) (lucas (- k 2))))))

这里也可以用cond代替if

代码语言:javascript
复制
(defun lucas-number (n)
  (cond ((= n 0) 2)
        ((= n 1) 1)
        (t
         (+ (lucas-number (- n 1))
            (lucas-number (- n 2))))))

您可以很容易地使用loop将一系列的Lucas数字收集到一个系列中

代码语言:javascript
复制
CL-USER> (loop :for n :from 0 :to 10
               :collect (lucas-number n))
(2 1 3 4 7 11 18 29 47 76 123)

这将迭代从0到10 (包括10)的n,收集列表中相关的Lucas值。将此代码放入函数中非常容易;这里使用了:below,以便调用(lucas-series 10)生成前10个卢卡数,而不是n == 10之前的所有卢卡数(这将是前11个卢卡数):

代码语言:javascript
复制
(defun lucas-series (n)
  (loop :for n :from 0 :below n
        :collect (lucas-number n)))

从REPL运行以下代码:

代码语言:javascript
复制
CL-USER> (lucas-series 10)
(2 1 3 4 7 11 18 29 47 76)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64583808

复制
相关文章

相似问题

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