История изменений
Исправление monk, (текущая версия) :
На этом вычисление compose останавливается, это результат
Cмотрим ещё раз, внимательней:
(define (compose f . fs)
(cond
[(null? fs) f]
[else
(define rest-f (apply compose fs))
(lambda (x) (f (rest-f x)))]))
(compose f g h)
=>
(begin
(define rest-f (apply compose (list g h))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(begin
(define rest-f1 (apply compose h))
(lambda (x) (g (rest-f1 x))))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(begin
(define rest-f1 h)
(lambda (x) (g (rest-f1 x))))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(lambda (x) (g (h x))))
(lambda (x) (f (rest-f x))))
=>
(lambda (x) (f ((lambda (x) (g (h x))) x)))
Исходная версия monk, :
На этом вычисление compose останавливается, это результат
Cмотрим ещё раз, внимательней:
(define (compose f . fs)
(cond
[(null? fs) f]
[else
(define rest-f (apply compose fs))
(lambda (x) (f (rest-f x)))]))
(compose f g h)
=>
(begin
(define rest-f (apply compose (list g h))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(begin
(define rest-f1 (apply compose h))
(lambda (x) (f (rest-f1 x))))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(begin
(define rest-f1 h)
(lambda (x) (f (rest-f1 x))))
(lambda (x) (f (rest-f x))))
=>
(begin
(define rest-f
(lambda (x) (f (h x))))
(lambda (x) (f (rest-f x))))
=>
(lambda (x) (f ((lambda (x) (f (h x))) x)))