|20-CS-4003-001||Organization of Programming Languages||Fall 2017|
Lambda - Y Combinator
(define Y (lambda (X) ((lambda (procedure) (X (lambda (arg) ((procedure procedure) arg)))) (lambda (procedure) (X (lambda (arg) ((procedure procedure) arg))))))) (define F* (lambda (func-arg) (lambda (n) (if (zero? n) 1 (* n (func-arg (- n 1)))))))
Step 6. We can write "fact" in terms of the Y-combinator as follows:
prompt> (define fact (Y F*))Try (fact 5) to check the result. For that matter, try
prompt> ((Y F*) 5).But Y is general and F* is specific to factorial but with no name! If we wrote the whole thing out it would look like the code on the left.