计算lisp中前n个数的总和

时间:2014-01-10 09:12:48

标签: lisp common-lisp

(defun sum(n)
  (cond
    ((= n 0) 0)
    ((= n 1) 1)
    (T (+ n sum (- n 1)))))

如果我调用(sum 4)它应该显示10但它给我一个错误:变量SUM没有值

1 个答案:

答案 0 :(得分:5)

Common Lisp是一个Lisp-2,这意味着变量和函数位于不同的名称空间中。

有一个功能 sum,但在您将其用作变量的位置没有变量 sum(+ n sum (- n 1))

您的意图可能是写(+ n (sum (- n 1)))而是递归调用函数sum

(defun sum (n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (T (+ n (sum (- n 1))))))

(如果您想将函数sum称为值,例如将其传递给另一个函数,则可以编写#'sum。)