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

Reply via email to