I am working through the Clojure koans.
I found a guy who did them and put his answers on github (username viebel), and when I am done I check mine against his. I found out you can also look at resources/koans.clj for answers, but they are formatting oddly in that file.
Koan 15 is about destructuring. Some of the problems use a map that is provided in the beginning:
(def test-address {:street-address "123 Test Lane" :city "Testerville" :state "TX"})
Here is the original problem:
(= "Test Testerson, 123 Test Lane, Testerville, TX" (___ ["Test" "Testerson"] test-address))
Here is my answer:
(= "Test Testerson, 123 Test Lane, Testerville, TX" ((fn [xstr ymap] (let [ {street-address :street-address, city :city, state :state} ymap ] (str (clojure.string/join " " xstr ) ", " street-address ", " city ", " state ))) ["Test" "Testerson"] test-address))
Here is the more elegant answer:
(= "Test Testerson, 123 Test Lane, Testerville, TX" ((fn[[a b] {:keys [street-address city state]}] (apply str (interpose ", " (list (str a " " b) street-address city state)))) ["Test" "Testerson"] test-address))
So they are taking the vector argument and destructuring it in the argument list itself. And destructuring the map right after it, making two arguments into five. Viebel has a few interesting ways to destructure that I did not know about.
I might replace my answers with the provided answers. Now when I run it, lein takes a relatively long time to get through koan 15.
You’re welcome.