我正在尝试在 R5RS 中编写自己的简化地图程序。简而言之,它接受一个过程和两个列表,并返回一个列表,其中包含在两个参数列表中的每对对象上调用的过程的结果,直到其中一个为空。
这适用于算术运算符,例如:
(map2-rec + '(1 2 3) '(1 2 3 4))
但是,当我尝试传递返回 #t 或 #f 的匿名 lambda 函数(我的 both? 过程的返回值)时,这不起作用。
(define (map2-rec proc items1 items2)
(if (or (null? items1) (null? items2))
'()
(cons (proc (car items1) (car items2))
(map2-rec proc (cdr items1) (cdr items2)))))
(define (both? proc)
(lambda (item1 item2)
((if (and (proc item1) (proc item2))
#t
#f))))
我在 DrRacket 中收到的具体错误是:
application: not a procedure;
expected a procedure that can be
applied to arguments
given: #t
arguments...: [none]
如果有人能告诉我如何纠正这个错误,我会很高兴。我不明白为什么这段代码自己会失败。