Little Javaつづき
巻末のYコンビネータ、同じものをSchemeで書いてみた。
(define G (lambda (h) (lambda (x) (h h) x))) (define H (lambda (mkfact) (lambda (h) (mkfact (G h))))) (define Y (lambda (mkfact) ((lambda (h) (h h)) (H mkfact)))) (define MkFact (lambda (g) (lambda (x) (cond ((eq? x 0) 0) (else (* x (g (- x 1)))))))) ((Y MkFact) 3)
以下はG, Hに分けない版。
(define Y (lambda (le) ((lambda (f) (f f)) (lambda (f) (le (lambda (x) (f f) x))))))