“学习”口齿不清,但我觉得我学习不正确我试图编写一个函数来添加由列表、数字和字符串组成的列表中的所有数字我忽略了字符串并进入了列表我把所有的括号都弄丢了。。。
Im在函子位置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的第一个子句中调用函数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))))))

请问您为什么要处理列表中的字符串?
另外,我建议您使用一个文本编辑器,它可以为您格式化代码并平衡排列Emacs是最好的选择。
此外,这段代码比lispy更具“方案性”如果我可以问一下,你用什么书来学习口齿不清。

关于lisp - 为什么我的lisp程序无法运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33224599/

10-13 07:36
查看更多