Skip to content

Instantly share code, notes, and snippets.

@sunilnandihalli
Created December 19, 2010 07:25
Show Gist options
  • Save sunilnandihalli/747171 to your computer and use it in GitHub Desktop.
Save sunilnandihalli/747171 to your computer and use it in GitHub Desktop.
when I use a recur inside a defmethod .. it does not seem to dispatch on the new arguments .. but stick to the same method.. It would be nice if it did dispatch on the arguments...
nil
user> (defmulti hello even?)
#'user/hello
user> (defmethod hello false [n]
(println [:odd n])
(recur (dec n)))
#<MultiFn clojure.lang.MultiFn@1e7c47>
user> (defmethod hello true [n]
(println [:even n])
(cond
(zero? n) nil
true (recur (dec n))))
#<MultiFn clojure.lang.MultiFn@1e7c47>
user> (hello 10)
[:even 10]
[:even 9]
[:even 8]
[:even 7]
[:even 6]
[:even 5]
[:even 4]
[:even 3]
[:even 2]
[:even 1]
[:even 0]
nil
user>
;I would have expected
[:even 10]
[:odd 9]
[:even 8]
[:odd 7]
[:even 6]
[:odd 5]
[:even 4]
[:odd 3]
[:even 2]
[:odd 1]
[:even 0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment