R5RS で独自の簡略化されたマップ プロシージャを作成しようとしています。つまり、プロシージャと 2 つのリストを取り、どちらかが空になるまで、2 つの引数リスト内のオブジェクトのすべてのペアに対して呼び出されたプロシージャの結果を含むリストを返します。
これは、次のような算術演算子ではうまく機能します。
(map2-rec + '(1 2 3) '(1 2 3 4))
ただし、#t または #f のいずれかを返す匿名ラムダ関数 (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]
このエラーを修正する方法を誰かが教えてくれたら、とてもうれしいです。このコードが失敗する理由がわかりません。