为什么我的 lisp 程序不是 运行?

Why is my lisp program not running?

"Learning" Lisp 用于学校,但我觉得我学得不正确。我正在尝试编写一个函数来将所有数字添加到由列表、数字和字符串组成的列表中。我忽略了字符串并输入了列表。我对所有的括号都迷路了...

我收到错误 函子位置 0 中的非法参数

(defun add-all (L)
    (cond
        (
            (null L)
            (0)
        )
        ( 
            (listp (car L) )
            (+ (add-all (car L)) (add-all (cdr L)) )
        )
        (
            (stringp (car L) )
            (+ (add-all (cdr L)) )
        )
        ( 
            t
            (+ (car L) (add-all (cdr L)) )
        )
    )
)

cond 的第一个子句中,您有:

(
  (null L)
  (0)
)

我想你想要:

(
  (null L)
  0
)

...没有括号。

您正试图在 cond 的第一个子句中调用函数 0。 IE。 (0)。这是为便于阅读而格式化的固定代码。

(defun add-all (list)
  (cond
    ((null list) 0)
    ((listp (car list)) (+ (add-all (car list)) (add-all (cdr list))))
    ((stringp (car list)) (+ (add-all (cdr list))))
    (t (+ (car list) (add-all (cdr list))))))

请问为什么要处理列表中的字符串?

另外,我建议您使用可以格式化代码并为您平衡括号的文本编辑器。 Emacs 是最好的选择。 此外,此代码比 lispy 更“方案”。请问你是用什么书学lisp的