thx again
2013/8/30 Bruno Kim Medeiros Cesar <brunokim...@gmail.com> > This exact use case is covered by letfn, which creates a named fn > accessible to all function definitions and the body. That even allows > mutual recursive definitions without declare. Your example would be > > (defn fib-n [n] > (letfn [(fib [a b] > > (cons a (lazy-seq (fib b (+ b a)))))] > (take n (fib 1 1)))) > > Note that its grammar is > > (letfn [fnspecs*] exprs*) > fnspec ==> (fname [params*] exprs) > > That is, don't forget to surround a function definition with parentheses > as above, and not as > > (letfn [fib [a b] ...]) > CompilerException java.lang.IllegalArgumentException: Don't know how to > create ISeq from: clojure.lang.Symbol > > The reason is that letfn accepts multiple definitions, and as each > function can have multiple expressions as in a do form, you can't just > partition the vector as you do in let. > > On Thursday, August 29, 2013 4:32:00 PM UTC-3, Jim foo.bar wrote: >> >> On 29/08/13 20:23, JvJ wrote: >> > I wonder if the somewhat counterintuitive concept of a "named >> > anonymous function" eludes some people, or isn't properly conveyed in >> > tutorials. >> >> I only consider #(...) as an anonymous function. The longer form (fn [] >> (...)) has the potential of being perfectly named, it's just you who >> doesn't give it a name usually... >> >> Jim >> > -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.