方案:对象 () 不适用

col*_*rco 2 lisp scheme

这是一个初学者的问题。然而,我花了两个多小时试图找出错误(我也进行了搜索)但没有成功。

(define a (lambda (l i) (
    (cond ((null? l) l)
          (else (cons (cons (car l) i) (a (cdr l) i))))
)))
Run Code Online (Sandbox Code Playgroud)

该函数a应该将原子i与 的每一项配对l。例如:

(a '(1 2 3) 4)应该返回((1 4) (2 4) (3 4))

但是,当我尝试使用调用该函数时,我得到:

The object () is not applicable
Run Code Online (Sandbox Code Playgroud)

我的函数有什么错误?

我正在使用mit-scheme --load a.lisp加载文件。然后我通过在交互模式下键入来调用函数 a。

Ren*_*nzo 5

与 lisp 语言中通常发生的错误一样,该错误取决于括号的错误使用,在本例中是包含函数体的额外括号。

删除它,该功能应该可以工作:

(define a (lambda (l i) 
            (cond ((null? l) l)
                  (else (cons (cons (car l) i) (a (cdr l) i))))))
Run Code Online (Sandbox Code Playgroud)

请记住,在 lisp 中,括号不是一种封闭表达式的方式,而是语法的重要组成部分:((+ 2 3))(+ 2 3). 后一个表达式的意思是:将数字 2 和 3 的值相加并返回结果。前者的意思是:将数字 2 和 3 的值相加,得到结果(数字 5),并将其作为零参数函数调用。这显然会导致错误,因为 5 不是函数......