you can do #(identity 1) 2010/4/18 Yonov <myo...@gmail.com>
> Thanks, a lot! > It seems that there is no nice way to make a shortened lambda function > which returns an integer. > I mean #(1) is not OK, and #1 is not OK. Although there is no problem > with this (fn [] 1). > > On Apr 18, 5:48 pm, "Stephen C. Gilardi" <squee...@mac.com> wrote: > > On Apr 18, 2010, at 9:21 AM, Yonov wrote: > > > > > > > > > Hi, > > > I am trying to implement memoize myself and have stucked on one place > > > for a lot of time. This is the code: > > > > > (defn mymemoize [func] > > > (let [dict (ref (hash-map)) > > > inner #((let > > > [val (@dict %)] > > > (if (nil? val) > > > (do (dosync (alter dict conj {% (func %)})) (println (class > > > (@dict %))) (@dict %)) > > > val)))] > > > inner)) > > > > > (defn gg [x] > > > (if (= x 1) 1 2)) > > > (def ff (mymemoize gg)) > > > (ff 1) > > > > > I am printing only for debuging purposes. Actually everything in the > > > do-block is OK, but there is no return value. Why? > > > > The body of your anonymous function literal (#()) has an extra level of > parentheses. Your code is coming up with the correct answer (the Integer 1) > and then trying to execute it with no arguments. That's what this exception: > > > > java.lang.ClassCastException: java.lang.Integer cannot be cast to > clojure.lang.IFn (NO_SOURCE_FILE:0) > > > > is trying to convey: > > > > This works: > > > > (defn mymemoize [func] > > (let [dict (ref (hash-map)) > > inner #(let [val (@dict %)] > > (if (nil? val) > > (do (dosync (alter dict conj {% (func %)})) > > (println (class (@dict %))) > > (@dict %)) > > val))] > > inner)) > > > > --Steve > > > > -- > > 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<clojure%2bunsubscr...@googlegroups.com> > > For more options, visit this group athttp:// > groups.google.com/group/clojure?hl=en > > -- > 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<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- Communication is essential. So we need decent tools when communication is lacking, when language capability is hard to acquire... - http://esperanto.net - http://esperanto-jongeren.nl Linux-user #496644 (http://counter.li.org) - first touch of linux in 2004 -- 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