Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@amalloy
Created November 6, 2012 07:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amalloy/4023304 to your computer and use it in GitHub Desktop.
Save amalloy/4023304 to your computer and use it in GitHub Desktop.
(defn ack [m n]
(cond (zero? m) (inc n)
(zero? n) (ack (dec m) 1)
:else (ack (dec m) (ack m (dec n)))))
(defn ack-cps
([m n] (ack-cps m n identity))
([m n k]
(loop [m m, n n, k k]
(cond (zero? m) (k (inc n))
(zero? n) (ack-cps (dec m) 1 k)
:else (ack-cps m (dec n) #(ack-cps (dec m) % k))))))
(defn ack-stack [m n]
(loop [m m, n n, stack ()]
(cond (zero? m) (if (seq stack)
(recur (peek stack) (inc n) (pop stack))
(inc n))
(zero? n) (recur (dec m) 1 stack)
:else (recur m (dec n) (conj stack (dec m))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment