"学习" 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)) )
)
)
)
答案 0 :(得分:3)
您正试图在cond的第一个子句中调用函数0。即。 (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))))))
我可以问你为什么要处理列表中的字符串?
作为额外的,我建议你使用一个文本编辑器,它可以格式化代码并为你平衡parens。 Emacs是最好的选择。 此代码也比lispy更“流行”。如果我问的话,你用什么书来学习口齿不清。
答案 1 :(得分:1)
在cond
的第一个条款中,您有:
(
(null L)
(0)
)
我想你想要:
(
(null L)
0
)
......没有parens。