计算lisp中前n个数的总和

use*_*278 1 lisp common-lisp

(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没有值

svk*_*svk 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))))))
Run Code Online (Sandbox Code Playgroud)

(如果你想将函数sum作为一个值引用,例如将它传递给另一个函数,你会写#'sum.)