CLISP多维数据集的递归函数返回一个列表

时间:2015-01-27 08:25:58

标签: function recursion lisp common-lisp exponent

我正在寻找帮助来编写一个返回前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。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

是的,你的功能有一点问题: - )

  1. 您正在递归threes而不是cubes
  2. 你试图用一个参数调用cons(它需要两个)。
  3. 您没有在递归中更改lst的值,因此,由于基本情况返回lst,您将始终获得传入的初始lst值。
  4. 这是一个固定版本:

    (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))