Hi, Daniel Here's my variant https://gist.github.com/49c6ac95b7456a150df8
Note, that in cookbook :Caffe-Moca should contain :cocoa, not :coco And I your variant calculating drink cost works incorrectly. (* (cost (key map-entry) (val map-entry))) should be replaced by (* (cost (key map-entry)) (val map-entry)) Regards, Nikita Beloglazov On Thu, Jul 29, 2010 at 3:02 AM, 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<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://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