2017-02-18 87 views
0

我試圖修改下面的函數來編寫Scheme中的兩個函數。函數組合在方案中

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

而不是

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

但我不知道如何使用eval。

+0

什麼是你期待發生什麼? – deltab

+0

你爲什麼要使用'eval'? – molbdnilo

+1

如果你有兩個函數參數,'eval'沒有任何意義。 – Sylwester

回答

0

從你的建議,我想你想使用Scheme的宏/預處理功能。 eval不適用於代碼轉換。組合物可以°方案被定義爲

(define (° f g) 
     (lambda (x) (f (g x)))) 

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

其中表達式fg和的元數爲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)