对于表达式:
((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