returns 列表的立方体函数的 CLISP 递归函数
CLISP recursive powers of cubes function that returns a list
我正在寻求帮助来编写一个returns 前 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。感谢您的帮助!
是的,您的函数有一个小问题::-)
- 您递归到
threes
而不是 cubes
。
- 您正在尝试使用一个参数调用
cons
(它需要两个参数)。
- 您没有在递归中更改
lst
的值,因此,由于基本情况 returns lst
,您将始终获得初始值 lst
你传入的值。
这是一个固定版本:
(defun cubes (dec lst)
(if (zerop dec)
lst
(cubes (1- dec) (cons (* dec dec dec) lst))))
你也可以使用循环工具,你应该检查 dec 的初始值是否为正,否则你可能会得到无穷大 loop/recursion:
(defun cubes (dec lst)
(append
(when (plusp dec)
(loop for i from 1 to dec collect (expt i 3)))
lst))
我正在寻求帮助来编写一个returns 前 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。感谢您的帮助!
是的,您的函数有一个小问题::-)
- 您递归到
threes
而不是cubes
。 - 您正在尝试使用一个参数调用
cons
(它需要两个参数)。 - 您没有在递归中更改
lst
的值,因此,由于基本情况 returnslst
,您将始终获得初始值lst
你传入的值。
这是一个固定版本:
(defun cubes (dec lst)
(if (zerop dec)
lst
(cubes (1- dec) (cons (* dec dec dec) lst))))
你也可以使用循环工具,你应该检查 dec 的初始值是否为正,否则你可能会得到无穷大 loop/recursion:
(defun cubes (dec lst)
(append
(when (plusp dec)
(loop for i from 1 to dec collect (expt i 3)))
lst))