我想创建一个包含n
个佩尔编号的列表。到目前为止,我已经创建了所有内容并且可以正常使用,但是我无法找到一种打印数字列表的方法。这是我的代码:
(defun pell (n)
(cond
( (= n 0) 0)
( (= n 1) 1)
( (= n 2) 2)
(t (+ (* 2 (pell (- n 1))) (pell (- n 2)))))
(loop for i from 1 to n doing
(list (pell i))))
不认为这是正确的,我想念什么?
答案 0 :(得分:2)
您需要实际打印列表,或者,如果在REPL上进行测试,则将其返回,以便REPL打印它。
在REPL上,您可以将值收集到一个列表中,然后让REPL打印它:
> (loop :for i :below n
:collect (pell i))
⇒ (0 1 2 5 12 29)
打印到标准输出:
(loop :for i :below n
:do (print (pell i)))
请注意,Lisp中普遍接受的格式如下(请参见http://gigamonkeys.com/book/syntax-and-semantics.html#formatting-lisp-code):
(defun pell (n)
(cond ((= n 0) 0)
((= n 1) 1)
((= n 2) 2)
(t (+ (* 2 (pell (- n 1)))
(pell (- n 2))))))
在函数定义中,您还缺少一个右括号,并且调用它的循环太多。您不想在该循环中进行递归调用,对吗?
答案 1 :(得分:1)
这与斐波那契数列有关,就像所有类似的序列一样,您可以通过将所需的最后n个数字保持循环来进行迭代。
(defun pell (n)
(loop :for cnt :below n
:for a := 0 :then b
:for b := 1 :then c
:for c := 2 :then (+ (* 2 b) a)
:collect a))