手順:
(define (double fn) (lambda (x) (fn (fn x))))
通話時:
(((double (double double)) 1+) 0)
これは正しいです:
(double (lambda (x) (double (double x) 1+) 0))
((lambda (x) (double^4 x) 1+) 0)
((double^4 1+) 0)
(16+ 0)
16
同様に、呼び出すとき:
(((((double double) double) double) 1+) 0)
これは正しいです:
(((double double (double double) double) 1+) 0)
(double (double (lambda (x) (double (double x) 1+) 0)))
(double (lambda (x) (double^4 1+) 0))
((lambda (x) (double^16 x) 1+) 0)
((double^16 1+) 0)
(256+ 0)
256