我目前正在和The Little Schemer一起学习 Scheme,遇到了一个奇怪的麻烦。这是我的代码:
(define rember
(lambda (a lat)
((if (null? lat)
'()
(cond
((eq? a (car lat)) (cdr lat))
(else (rember a (cdr lat))))))))
(rember 'aaa '(bbb aaa))
我在教科书中使用了“if”而不是“cond”。从尾递归返回时,它显示此错误:
application: not a procedure;
expected a procedure that can be applied to arguments
given: '()
arguments...: [none]
我猜这是因为它将 if 语句中的 '() 视为一个函数,并将尾递归的返回值视为其参数。但是由于这本书没有给我太多关于语言的细节,你能帮我解释一下吗?(例如,这实际上是某种语言特性吗?有什么方法可以让我在这段代码中坚持使用“if”吗?什么时候可以安全地使用“if”?)
谢谢。