这是一个初学者的问题。然而,我试图找出错误超过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。
答案 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不是函数...