On Tue, Jun 9, 2009 at 6:04 PM, arasoft <t...@arasoft.de> wrote: > > I tried this: > > (declare F) > > (defn M [n] > (if (zero? n) > 0 > (- n (F (M (dec n)))))) > > (defn F [n] > (if (zero? n) > 1 > (- n (M (F (dec n)))))) > > and for large n I got the expected stack overflow. Then I tried to > trampoline the functions: > > (declare F) > > (defn M [n] > (if (zero? n) > 0 > #(- n (F (M (dec n)))))) > > (defn F [n] > (if (zero? n) > 1 > #(- n (M (F (dec n)))))) > > Now (trampoline #(M 7)) yields > java.lang.ClassCastException: user$M__760$fn__762 cannot be cast to > java.lang.Number (NO_SOURCE_FILE:0) > > Does anybody have an idea to get this to work? >
I don't know how to make it work, but I can tell you why you're getting a ClassCastException. In the definition of M, you have (F (M (dec n)). This is returned in a fn, which is fine until it gets called. When called, the inner M could return a fn, which gets passed to F, which assumes it's a number and tries to use it in a subtraction operation. Shawn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---