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

Reply via email to