, Lazy Racket, , - , Scheme. .
Y Z:
(define Z
(lambda (f)
((lambda (g) (g g))
(lambda (g)
(f (lambda args (apply (g g) args)))))))
, , , - (g g), , :
(define Z
(lambda (f)
((lambda (g)
(f (lambda args (apply (g g) args))))
(lambda (g)
(f (lambda args (apply (g g) args)))))))
. , . , apply . :
(define ackermann
(lambda (m n)
(cond
((= m 0) (+ n 1))
((= n 0) (ackermann (- m 1) 1))
(else (ackermann (- m 1) (ackermann m (- n 1)))))))
(ackermann 3 6) ; ==> 509
Z :
((Z (lambda (ackermann)
(lambda (m n)
(cond
((= m 0) (+ n 1))
((= n 0) (ackermann (- m 1) 1))
(else (ackermann (- m 1) (ackermann m (- n 1))))))))
3
6) ; ==> 509
, , , .
, , . :
(define Y
(lambda (f)
((lambda (g) (g g))
(lambda (g) (f (g g))))))
, , , Y , , f (f (g g)), (g g), , , (f (g g)) .. , (g g) . , (g g) , f , . add1, (lambda (x) (add1 x)), , . (lambda args (apply (g g) args)) (g g), , . , , .