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