为什么我的 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的
"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的