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。感谢您的帮助!

是的,您的函数有一个小问题::-)

  1. 您递归到 threes 而不是 cubes
  2. 您正在尝试使用一个参数调用 cons(它需要两个参数)。
  3. 您没有在递归中更改 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))