20-CS-4003-001 | Organization of Programming Languages | Fall 2017 |
---|---|---|
Lambda |
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. |
||