(defun sum(n)
(cond
((= n 0) 0)
((= n 1) 1)
(T (+ n sum (- n 1)))))
Run Code Online (Sandbox Code Playgroud)
如果我调用(sum 4)它应该显示10但它给我一个错误:变量SUM没有值
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))))))
Run Code Online (Sandbox Code Playgroud)
(如果你想将函数sum作为一个值引用,例如将它传递给另一个函数,你会写#'sum.)