方案:对象()不适用

Scheme: The object () is not applicable

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

(define a (lambda (l i) (
    (cond ((null? l) l)
          (else (cons (cons (car l) i) (a (cdr l) i))))
)))

函数 a 应该将原子 il 的每个项目配对。例如:

(a '(1 2 3) 4) 应该 return ((1 4) (2 4) (3 4))

然而,当我尝试使用 invoke 函数时,我得到:

The object () is not applicable

我的函数有什么错误?

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

错误,通常发生在 lisp 语言中,取决于括号的错误使用,在本例中是将函数主体括起来的额外括号。

删除它,函数应该可以工作:

(define a (lambda (l i) 
            (cond ((null? l) l)
                  (else (cons (cons (car l) i) (a (cdr l) i))))))

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