方案:object()不适用

时间:2016-06-15 16:59:07

标签: scheme lisp

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

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

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

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

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

The object () is not applicable

我的功能有什么错误?

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

1 个答案:

答案 0 :(得分:4)

错误(通常在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的值相加并返回结果。前者表示:将数字2和3的值相加,得到结果(数字5),并将其称为零参数的函数。这显然会导致错误,因为5不是函数...