Very clear, much appreciate!

On Jun 4, 2:55 am, Chouser <chou...@gmail.com> wrote:
> On Thu, Jun 3, 2010 at 9:38 AM, YD <ydong.pub...@gmail.com> wrote:
> > Hi,
>
> > When 'destructure' is doing a map destructuring, 'pmap' is the
> > function to use. 'pmap' will do some kind of process to the given
> > bindings using these lines of code:
> >                                bes (reduce
> >                                     (fn [bes entry]
> >                                       (reduce #(assoc %1 %2 ((val
> > entry) %2))
> >                                               (dissoc bes (key
> > entry))
> >                                               ((key entry) bes)))
> >                                     (dissoc b :as :or)
> >                                     {:keys #(keyword (str %)), :strs
> > str, :syms #(list `quote %)})
>
> > I'm confused. Since every time ((key entry) bes) evaluates to nil, the
> > inner reduce will never really do some useful thing. What's the
> > purpose of this piece of code?
>
> Yes, if ((key entry) bes) is nil then the inner reduce simply
> returns the binding map as it stands.  The purpose of this code
> is to support the :keys, :strs, and :syms keys in map
> destructuring:
>
>         (let [{:keys [a b]} {:a 1 :b 2}] [a b])
>         ;=> [1 2]
>
> In this example, (key entry) will be :keys for one of the
> iterations of the inner reduce.  When (key entry) is :keys, ((key
> entry) bes) will be [a b], and the inner reduce will process each
> item of that vector, finally returning {a :a b :b} as the whole
> binding map.
>
> Which means the above example does exactly the same things as:
>
>         (let [{a :a b :b} {:a 1 :b 2}] [a b])
>         ;=> [1 2]
>
> ...which is what you'd do if there was no support for :keys
>
> --Chouserhttp://joyofclojure.com/

-- 
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