我正在寻找帮助来编写一个返回前15个立方体列表的函数。这是我到目前为止所得到的,我正在堆栈溢出:
(defun cubes (dec lst) ;takes a number and a list as params
(if (= dec 0) lst ;if dec is 0 return the list
(cons (threes (- dec 1) lst))) ;;else decrement and call it again
)
我用以下代码调用它:
(cubes 15 nil) ;should print first 15 cubes
我今天刚开始参加LISP。谢谢你的帮助!
答案 0 :(得分:2)
是的,你的功能有一点问题: - )
threes
而不是cubes
。cons
(它需要两个)。lst
的值,因此,由于基本情况返回lst
,您将始终获得传入的初始lst
值。 这是一个固定版本:
(defun cubes (dec lst)
(if (zerop dec)
lst
(cubes (1- dec) (cons (* dec dec dec) lst))))
答案 1 :(得分:1)
你也可以使用循环工具,你应该检查dec的初始值是否为正,否则你可能会得到无限循环/递归:
(defun cubes (dec lst)
(append
(when (plusp dec)
(loop for i from 1 to dec collect (expt i 3)))
lst))