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 > 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 For more options, visit this group at http://groups.google.com/group/clojure?hl=en