练习 1.42

对于表达式:

((compose square 1+) 6)

要计算出值 49 ,这个表达式应该执行以下计算序列:

((compose square 1+) 6)

((lambda (x)
     (square (1+ x)))
 6)

(square (1+ 6))

(square 7)

49

也即是, (compose f g) 的展开式应该为:

(lambda (x)
    (f (g x)))

为这一模式赋予一个名字,得出的就是复合函数的定义了:

;;; 42-compose.scm

(define (compose f g)
    (lambda (x)
        (f (g x))))

测试:

1 ]=> (load "42-compose.scm")

;Loading "42-compose.scm"... done
;Value: compose

1 ]=> ((compose square 1+) 6)

;Value: 49

讨论

blog comments powered by Disqus