diff --git a/src/koans/macros.clj b/src/koans/macros.clj index 5843900..161f6a2 100644 --- a/src/koans/macros.clj +++ b/src/koans/macros.clj @@ -24,21 +24,21 @@ (meditations - "Macros are like functions created at compile time" - (= __ (hello "Macros!")) + "Macros are like functions created at compile time" + (= __ (hello "Macros!")) - "Can I haz some infix?" - (= __ (infix (9 + 1))) + "Can I haz some infix?" + (= __ (infix (9 + 1))) - "Remember, these are nothing but code transformations" - (= __ (macroexpand '(infix (9 + 1)))) + "Remember, these are nothing but code transformations" + (= __ (macroexpand '(infix (9 + 1)))) - "You can do better than that, hand crafting ftw!" - (= __ (macroexpand '(infix-better (10 * 2)))) + "You can do better than that, hand crafting ftw!" + (= __ (macroexpand '(infix-better (10 * 2)))) - "Things dont always work as you would like them to... " - (= __ (macroexpand '(infix-better ( 10 + (2 * 3))))) + "Things dont always work as you would like them to... " + (= __ (macroexpand '(infix-better ( 10 + (2 * 3))))) - "Really, you dont understand recursion until you understand recursion" - (= 36 (r-infix (10 + (2 * 3) + (4 * 5))))) + "Really, you dont understand recursion until you understand recursion" + (= 36 (r-infix (10 + (2 * 3) + (4 * 5))))) diff --git a/src/path_to_answer_sheet.clj b/src/path_to_answer_sheet.clj index f3bc5e3..47db851 100644 --- a/src/path_to_answer_sheet.clj +++ b/src/path_to_answer_sheet.clj @@ -11,6 +11,7 @@ false 6/3 3]} + "lists" {"__" [1 2 3 4 5 1 [2 3 4 5] @@ -21,6 +22,7 @@ [:b :c :d :e] "No dice!" ()]} + "vectors" {"__" [1 [] [1] @@ -32,11 +34,13 @@ :jelly [:butter :and] 3]} + "sets" {"__" [3 #{1 2 3 4 5} #{1 2 3 4 5} #{2 3} #{1 4}]} + "maps" {"__" [0 1 2 @@ -52,6 +56,7 @@ 1 "January" 2006 2010 2014 "Vancouver"]} + "functions" {"__" [20 10 5 30 2 @@ -59,12 +64,14 @@ 20 '*] "___" ['(fn [f] (f 5)) '(fn [f] (f 5))]} + "conditionals" {"__" [:a [] 0 :glory 4 6 :your_road ''doom 0 ]} + "higher_order_functions" {"__" [4 8 12 '(* x x) [false false true false false] @@ -75,18 +82,21 @@ 24 100 '(count a) '(count b)]} + "runtime_polymorphism" {"__" ['(str (:name a) " eats veggies.") '(str (:name a) " eats animals.") '(str "I don't know what " (:name a) " eats.") "Hello World!" "Hello, you silly world." "Hello to this group: Peter, Paul, Mary!" ]} + "sequence_comprehensions" {"__" [[0 1 2 3 4 5] '(* index index) '(range 10) '(odd? index) '(* index index) '[row column] ]} + "creating_functions" {"__" [true false true 4 :a :b :c :d @@ -96,23 +106,25 @@ "___" ['(complement nil?) 'multiply-by-5 '(comp dec square)]} + "recursion" {"__" [true 'acc '(loop [n n acc 1] (if (zero? n) acc (recur (dec n) (* acc n))))] "___" ['not]} + "destructuring" {"__" [":bar:foo" '(format (str "First comes %s, " "then comes %s, " "then comes %s with the baby carriage") a b c) '(apply str - (interpose " " - (apply list - first-name - last-name - (interleave (repeat "aka") aliases)))) + (interpose " " + (apply list + first-name + last-name + (interleave (repeat "aka") aliases)))) '{:original-parts full-name :named-parts {:first first-name :last last-name}} '(str street-address ", " city ", " state) @@ -132,27 +144,27 @@ "___" ['(comp exclamator exclamator exclamator) '(fn [x] (+ 20 x))]} - "macros" {"__" ['~(first form) - '~(nth form 2) - 'form - '(drop 2 form) - "Hello, Macros!" - 10 - ''(+ 9 1) - ''(* 10 2) - ''(+ 10 (2 * 3))]} - "datatypes" {"__" ['(print - (str "You're really the " - (.category this) - ", " recipient "... sorry.")) - "peace" - "literature" - "physics" - nil - [true false] - "Congratulations on your Best Picture Oscar, Evil Alien Conquerors!" - ]} - }) + "macros" {"__" ['~(first form) + '~(nth form 2) + 'form + '(drop 2 form) + "Hello, Macros!" + 10 + ''(+ 9 1) + ''(* 10 2) + ''(+ 10 (2 * 3))]} + + "datatypes" {"__" ['(print + (str "You're really the " + (.category this) + ", " recipient "... sorry.")) + "peace" + "literature" + "physics" + nil + [true false] + (str "Congratulations on your Best Picture Oscar, " + "Evil Alien Conquerors!")]}}) (defn replace-with [s k replacements] (let [unreplaced-texts (split s (re-pattern (str "\\b" k "\\b")))]