Hi Nadeen, Welcome to Clojure!
I'd recommend incorporating Clojure's excellent REPL into your workflow to easily try things out with quick feedback. Here's an online version with your code snippet prepopulated - just hit the run button! https://repl.it/repls/OblongIntrepidAlabamamapturtle This should do what you like - (def input-file [{:st_abbrev "AZ", :firstname "john", :lastname "smith"} {:st_abbrev "FL", :firstname "roy", :lastname "wills"} {:st_abbrev "OH", :firstname "jay", :lastname "louis"}]) (def state-names {"AZ" "Arizona", "FL" "Florida", "OH" "Ohio"}) (defn state-desc3 [e] (assoc e :state (state-names (:st_abbrev e)))) (map state-desc3 input-file) On Tue, Feb 6, 2018 at 5:27 AM, Nadeen Kurz <kurznad...@gmail.com> wrote: > Thanks for the quick response James. Yes, you hit the nail on the head > with me not understanding map, explanation you provided helps. I like the > second option better. I have tried both options and now I am getting > "illegalargumentexception, key must be an integer" > When I call > (state-desc3 input-file) > > When I do this, it works find of course cause it's only one > (state-desc3 {:st_abbr "AZ", :first name "John", :lastname "Smith"}) > > > 1) maybe an index problem which I don't understand yet and researching > > 2) I need to figure out how to call function for testing > > > On Feb 5, 2018 9:57 PM, "James Reeves" <ja...@booleanknot.com> wrote: > > First: > > (#(map :st_abbrev input-file)) > > Is equivalent to: > > (map :st_abbrev input-file) > > Because your putting the form in an anonymous function, then immediately > calling it. This is equivalent to just evaluating the form. > > Next, I think you're confused as to how `map` handles multiple arguments. > If you call: > > (map f [1 2 3] [4 5 6]) > > Then it will return: > > [(f 1 4) (f 2 5) (f 3 6)] > > The two collections are lined up, then passed as arguments to the function. > > If you want to put this into one function, then you don't need an inner > map. You instead want: > > (defn state-desc2 [input-file] > (let [desc2 (:st_abbrev input-file)] > (case desc2 > "AZ" (assoc input-file :state "Arizona") > "FL" (assoc input-file :state "Florida") > "OH" (assoc input-file :state "Ohio") > "default"))) > > You could also write it as: > > (def state-names > {"AZ" "Arizona", "FL" "Florida", "OH" "Ohio"}) > > (defn state-desc3 [input-file] > (assoc input-file :state (state-names (:st_abbrev input-file)))) > > > > On 6 February 2018 at 01:22, Nadeen Kurz <kurznad...@gmail.com> wrote: > >> Can someone help me with the following please: I am new to clojure and i >> haven't developed in 4 years, previous was mainframe. See questions in blue >> >> ; Task is to add full state name based on st_abbr >> >> >> (def input-file [{:st_abbrev "AZ", :firstname "john", :lastname "smith"} >> {:st_abbrev "FL", :firstname "roy", :lastname >> "wills"} >> {:st_abbrev "OH", :firstname "jay", :lastname >> "louis"}]) >> >> *Question 1: How do I make these between the lines into one Defn?* >> ----------------------------------------------------------------------- >> (def get-state >> (#(map :st_abbrev input-file))) >> >> #'user/get-state >> ("AZ" "FL" "OH") >> >> (defn state-desc [get-state input-file] >> (let [desc get-state] >> (case desc >> "AZ" (assoc input-file :state "Arizona") >> "FL" (assoc input-file :state "Florida") >> "OH" (assoc input-file :state "Ohio") >> "default" >> ))) >> >> (map state-desc get-state input-file) >> >> #'user/state-desc >> ({:st_abbrev "AZ", :firstname "john", :lastname "smith", :state >> "Arizona"} >> {:st_abbrev "FL", :firstname "roy", :lastname "wills", :state >> "Florida"} >> {:st_abbrev "OH", :firstname "ja y", :lastname "louis", :state "Ohio"}) >> ------------------------------------------------------------ >> --------------- >> >> Question 2: I tried to combine in one defn, but it's not working, any >> help would be appreciated >> >> (defn state-desc2 [input-file] >> (let [desc2 (#(map :st_abbrev input-file))] >> (case desc2 >> "AZ" (assoc input-file :state "Arizona") >> "FL" (assoc input-file :state "Florida") >> "OH" (assoc input-file :state "Ohio") >> "default" >> ))) >> >> (map state-desc2 input-file) >> >> #'user/state-desc2 >> ("default" "default" "default") >> >> -- >> 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 >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > James Reeves > booleanknot.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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Alpeware LLC - 548 Market St #35286, San Francisco, CA 94104 - +1 415 200 3094 -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.