Scheme中的函数组成

时间:2017-02-18 03:45:33

标签: macros scheme function-composition

我试图修改下面的函数来构建Scheme中的两个函数。

(define (compose F1 F2)
    (eval F1 (interaction-environment))
)

而不是

(define (compose f g)
  (λ (x) (f (g x))))

但我不确定如何使用eval。

1 个答案:

答案 0 :(得分:0)

根据您的建议,我想您想要使用Scheme的宏/预处理功能。 eval不适用于代码转换。组合可以在Scheme中定义为

(define (∘ f g)
        (lambda (x) (f (g x))) )

(define-syntax ∘
   (syntax-rules ()
      ((∘ f g)
       (lambda (x) (f (g x))) )))

表达式fg的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)