我试图修改下面的函数来构建Scheme中的两个函数。
(define (compose F1 F2)
(eval F1 (interaction-environment))
)
而不是
(define (compose f g)
(λ (x) (f (g x))))
但我不确定如何使用eval。
答案 0 :(得分:0)
根据您的建议,我想您想要使用Scheme的宏/预处理功能。 eval
不适用于代码转换。组合∘
可以在Scheme中定义为
(define (∘ f g)
(lambda (x) (f (g x))) )
或
(define-syntax ∘
(syntax-rules ()
((∘ f g)
(lambda (x) (f (g x))) )))
表达式f
和g
的arity为1。
(define (plus-10 n) (+ n 10))
(define (minus-3 n) (- n 3))
(display
(map (∘ plus-10 minus-3)
(list 1 2 3 4) ))
编译时的map
表达式变为
(map (lambda (x) (plus-10 (minus-3 x)))
(list 1 2 3 4) )
equal?
Š
(list 8 9 10 11)