为什么我的lisp程序没有运行?

为什么我的lisp程序没有运行?,lisp,common-lisp,Lisp,Common Lisp,在学校“学习”口齿不清,但我觉得我学习不正确。我正在尝试编写一个函数,将所有数字添加到由列表、数字和字符串组成的列表中。我正在忽略字符串并输入列表。我被所有的括号弄糊涂了 我收到函子位置0的错误非法参数 (defun add-all (L) (cond ( (null L) (0) ) ( (listp (car L) ) (+ (add-al

在学校“学习”口齿不清,但我觉得我学习不正确。我正在尝试编写一个函数,将所有数字添加到由列表、数字和字符串组成的列表中。我正在忽略字符串并输入列表。我被所有的括号弄糊涂了

我收到函子位置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
的第一条中,您有:

(
  (null L)
  (0)
)
我想你想要:

(
  (null L)
  0
)

。。。没有parens。

您正在尝试调用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更为“scheme”。如果我可以问的话,你用什么书来学习lisp。

你试图调用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更为“scheme”。如果我可以问的话,你用什么书来学习lisp。

哇,非常简单,谢谢!问题是针对学校班级,“处理字符串”只是特定问题的一个要求(是的,有点傻)。我们的教科书是《编程语言概念》(Sebesta),在这里我们学习lisp是为了体验函数式编程。函数式编程没有什么错,虽然不是lisp中最常见的,但它被一些人使用,最著名的是Scott McKay。但是他们教授的是(递归的)分而治之的解决问题的方法,而不是函数式编程。根据我的经验,这种方法使困难的问题更容易解决,但会导致代码之后很难通过略读理解。来说明我刚才提到的观点。您将看到,它使用的函数只做一件事,并组合它们来解决问题。(1/2)所以他们很可能使用lisp(和其他语言)作为工具来教你(其他)概念。但是,如果这种风格是lisp的全部,那么它可能会给语言留下不好的印象(我知道我会的)。如果你想更详细地学习lisp,你应该去看看。(2/2)哇,很容易修复谢谢!问题是针对学校班级,“处理字符串”只是特定问题的一个要求(是的,有点傻)。我们的教科书是《编程语言概念》(Sebesta),在这里我们学习lisp是为了体验函数式编程。函数式编程没有什么错,虽然不是lisp中最常见的,但它被一些人使用,最著名的是Scott McKay。但是他们教授的是(递归的)分而治之的解决问题的方法,而不是函数式编程。根据我的经验,这种方法使困难的问题更容易解决,但会导致代码之后很难通过略读理解。来说明我刚才提到的观点。您将看到,它使用的函数只做一件事,并组合它们来解决问题。(1/2)所以他们很可能使用lisp(和其他语言)作为工具来教你(其他)概念。但是,如果这种风格是lisp的全部,那么它可能会给语言留下不好的印象(我知道我会的)。如果你想更详细地学习lisp,你应该去看看。(2/2)