Skip to content

Instantly share code, notes, and snippets.

@rxacevedo
Last active August 29, 2015 14:03
Show Gist options
  • Save rxacevedo/bf127403efe6ebb46df6 to your computer and use it in GitHub Desktop.
Save rxacevedo/bf127403efe6ebb46df6 to your computer and use it in GitHub Desktop.
Using trampoline to process a long sequence of mutually recursive function calls.
(letfn [(m-even [v]
(if (zero? v) v
(fn [] (m-odd (dec v)))))
(m-odd [v]
(if (zero? v) v
(fn [] (m-even (dec v)))))]
(trampoline m-even 100000))
;; => 0
(letfn [(m-even [v]
(if (zero? v) v
(m-odd (dec v))))
(m-odd [v]
(if (zero? v) v
(m-even (dec v))))]
(trampoline m-even 100000))
; StackOverflowError clojure.lang.Numbers.isZero (Numbers.java:90)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment