Hi Joe, Laurent and Nikita,

Thanks for your help, the destructuring form of [[k v]] is much
cleaner, that's exactly what I was looking for.
Nikita, thanks for catching the typo and the misplaced paren, the code
is working smoothly now.

I have problem coded in Java, I plan to complete the Clojure version
and enhance both versions to support concurrent baristas and
customers.  I'll post the code up in GitHub when I'm done if anyone
else would like the use the examples.

Cheers,
Daniel

On Jul 29, 7:49 am, joegg <joega...@gmail.com> wrote:
> I agree with Laurent's idea that you should pull this out as a
> separate function, but I think the most direct answer to your question
> is that you can bind the map entries in a destructuring  as if they
> were two-element vectors.
>
> (map (fn [[ingr quant]] (* (cost ingr) quant)) (cookbook drink))
>
> Joe
>
> On Jul 28, 8:02 pm, Daniel Glauser <danglau...@gmail.com> wrote:
>
>
>
> > Hello folks,
>
> > I'm working on some sample code and I have a feeling that there is an
> > easier/more succinct way to code this.  Any help or RTFM with a link
> > is appreciated.
>
> > Given:
>
> > (def cookbook {:Coffee          {:coffee 3, :sugar 1, :cream 1},
> >                :Decaf-Coffee    {:decaf 3, :sugar 1, :cream 1},
> >                :Caffe-Late      {:espresso 2, :steamed-milk 1},
> >                :Caffe-Americano {:espresso 3},
> >                :Caffe-Moca      {:espresso 1, :coco 1, :steamed-milk
> > 1, :cream 1},
> >                :Cappuccino      {:espresso 2, :steamed-milk 1, :foamed-milk
> > 1} })
>
> > (def cost {:coffee        0.75,
> >            :decaf         0.75,
> >            :sugar         0.25,
> >            :cream         0.25,
> >            :steamed-milk  0.35,
> >            :foamed-milk   0.35,
> >            :espresso      1.00,
> >            :cocoa         0.90,
> >            :whipped-cream 1.00 })
>
> > (def menu {:Coffee          1,
> >            :Decaf-Coffee    2,
> >            :Caffe-Late      3,
> >            :Caffe-Americano 4,
> >            :Caffe-Moca      5,
> >            :Cappuccino      6 })
>
> > I'm trying to write a function to print out the menu listing the cost
> > of each drink.  It works (sort of) but I keep thinking there is an
> > easier way.
>
> > (defn print-menu [menu]
> >   (do
> >     (println "Menu:")
> >     (doseq [[drink number] menu]
> >       (println (str number ", " (drink-name drink) ", "
> >                     (reduce +
> >                             (map (fn [map-entry] (* (cost (key map-entry) 
> > (val map-
> > entry)))) (cookbook drink))))))))
>
> > Specifically this part:
> > (map (fn [map-entry] (* (cost (key map-entry) (val map-entry))))
> > (cookbook drink))
>
> > Is there a way I can get at the map key and value using destructuring
> > without knowing what the key is ahead of time?
>
> > Thanks,
> > Daniel

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