Function CLISP返回列表的多维数据集递归幂函数

Function CLISP返回列表的多维数据集递归幂函数,function,recursion,lisp,common-lisp,exponent,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 ) 我用以下代码调用它:

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

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

  • 您正在递归到
    三个
    而不是
    多维数据集
  • 您试图用一个参数调用
    cons
    (需要两个参数)
  • 您没有在递归中更改
    lst
    的值,因此,由于基本情况返回
    lst
    ,因此始终会得到传入的初始
    lst
  • 这里有一个固定版本:

    (defun cubes (dec lst)
      (if (zerop dec)
          lst
          (cubes (1- dec) (cons (* dec dec dec) lst))))
    

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

  • 您正在递归到
    三个
    而不是
    多维数据集
  • 您试图用一个参数调用
    cons
    (需要两个参数)
  • 您没有在递归中更改
    lst
    的值,因此,由于基本情况返回
    lst
    ,因此始终会得到传入的初始
    lst
  • 这里有一个固定版本:

    (defun cubes (dec lst)
      (if (zerop dec)
          lst
          (cubes (1- dec) (cons (* dec dec dec) lst))))
    

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

  • 您正在递归到
    三个
    而不是
    多维数据集
  • 您试图用一个参数调用
    cons
    (需要两个参数)
  • 您没有在递归中更改
    lst
    的值,因此,由于基本情况返回
    lst
    ,因此始终会得到传入的初始
    lst
  • 这里有一个固定版本:

    (defun cubes (dec lst)
      (if (zerop dec)
          lst
          (cubes (1- dec) (cons (* dec dec dec) lst))))
    

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

  • 您正在递归到
    三个
    而不是
    多维数据集
  • 您试图用一个参数调用
    cons
    (需要两个参数)
  • 您没有在递归中更改
    lst
    的值,因此,由于基本情况返回
    lst
    ,因此始终会得到传入的初始
    lst
  • 这里有一个固定版本:

    (defun cubes (dec lst)
      (if (zerop dec)
          lst
          (cubes (1- dec) (cons (* dec dec dec) lst))))
    

    您还可以使用循环功能,并且您应该检查dec的初始值是否为正值,否则您可能会以无限循环/递归结束:

    (defun cubes (dec lst)
           (append
              (when (plusp dec)
                    (loop for i from 1 to dec collect (expt i 3)))
              lst))
    

    您还可以使用循环功能,并且您应该检查dec的初始值是否为正值,否则您可能会以无限循环/递归结束:

    (defun cubes (dec lst)
           (append
              (when (plusp dec)
                    (loop for i from 1 to dec collect (expt i 3)))
              lst))
    

    您还可以使用循环功能,并且您应该检查dec的初始值是否为正值,否则您可能会以无限循环/递归结束:

    (defun cubes (dec lst)
           (append
              (when (plusp dec)
                    (loop for i from 1 to dec collect (expt i 3)))
              lst))
    

    您还可以使用循环功能,并且您应该检查dec的初始值是否为正值,否则您可能会以无限循环/递归结束:

    (defun cubes (dec lst)
           (append
              (when (plusp dec)
                    (loop for i from 1 to dec collect (expt i 3)))
              lst))
    


    你不想在某处计算立方体吗?你不想在某处计算立方体吗?你不想在某处计算立方体吗?你不想在某处计算立方体吗?你不想在某处计算立方体吗?@Svante Oops。太专注于让代码工作,而忽略了查看问题域。@DomnWerner
    (*dec)
    与中缀中的
    dec*dec*dec
    相同。它的计算结果基本上是
    dec
    的立方体。你不想在某处计算立方体吗?@Svante Oops。太专注于让代码工作,而忽略了查看问题域。@DomnWerner
    (*dec)
    与中缀中的
    dec*dec*dec
    相同。它的计算结果基本上是
    dec
    的立方体。你不想在某处计算立方体吗?@Svante Oops。太专注于让代码工作,而忽略了查看问题域。@DomnWerner
    (*dec)
    与中缀中的
    dec*dec*dec
    相同。它的计算结果基本上是
    dec
    的立方体。你不想在某处计算立方体吗?@Svante Oops。太专注于让代码工作,而忽略了查看问题域。@DomnWerner
    (*dec)
    与中缀中的
    dec*dec*dec
    相同。它基本上计算为
    dec
    的多维数据集。你不需要
    lst
    append
    when
    。我的意思是:
    (defun多维数据集(n)(when(plusp n)(循环:for I:from 1:to n:collect(expt I 3))
    。没错,但是作者的函数使用了一个整数和一个列表,所以建议的变量也应该使用。
    (defun多维数据集(n列表)(declare(ignore列表))(when(plusp n)(循环:for i:from 1:to n:collect(expt i 3)))
    作者的变体将多维数据集添加到作为第二个参数给出的列表中,而您的变量只是忽略了它。当我编写变体时,我考虑了原始变体的实际操作。您不需要
    lst
    附加
    时。我的意思是:
    (defun cubes(n)(When)(plusp n)(循环:for i:from 1:to n:collect(expt i 3))
    。没错,但是作者的函数采用了一个整数和一个列表,所以建议的变量也应该如此。
    (defun cubes(n list)(declare(ignore list))(when(plusp n)(循环:for i:from 1:to n:collect(expt i 3)))
    作者的变体将多维数据集添加到作为第二个参数给出的列表中,而您的变量只是忽略了它。当我编写变体时,我考虑了原始变体的实际操作。您不需要
    lst
    附加
    时。我的意思是:
    (defun cubes(n)(When)(plusp n)(循环:for i:from 1:to n:collect(expt i 3))
    。没错,但是作者的函数采用了一个整数和一个列表,所以建议的变量也应该如此。
    (defun cubes(n list)(declare(ignore list))(when(plusp n)(循环:for i:from 1:to n:collect(expt i 3)))
    作者的变体将多维数据集添加到作为第二个参数给出的列表中,而您的变量只是忽略它。当我编写变体时,我考虑了原始变体的实际功能。您不需要
    lst
    追加