(defun sum(n)
(cond
((= n 0) 0)
((= n 1) 1)
(T (+ n sum (- n 1)))))
如果我调用(sum 4)
它应该显示10但它给我一个错误:变量SUM没有值
答案 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
。)