Skip to content

Instantly share code, notes, and snippets.

@ijp
Created April 11, 2014 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ijp/10435657 to your computer and use it in GitHub Desktop.
Save ijp/10435657 to your computer and use it in GitHub Desktop.
;; extending the y combinator to handle mutual recursion, for zacts
(define (y . funcs)
((lambda (x) (x x))
(lambda (x)
(map (lambda (g)
(lambda args
(apply (apply g (x x)) args)))
funcs))))
(define-syntax-rule (my-letrec ((var val) ...) body ...)
(apply (lambda (var ...)
body ...)
(y (lambda (var ...)
val)
...)))
(my-letrec
((odd? (lambda (x)
(if (zero? x)
#f
(even? (- x 1)))))
(even? (lambda (x)
(if (zero? x)
#t
(odd? (- x 1))))))
(list (even? 10)
(odd? 10)
(even? 9)
(odd? 9)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment