Add datatypes.
This commit is contained in:
parent
c604126a4e
commit
ebe856b45d
45
src/koans/datatypes.clj
Normal file
45
src/koans/datatypes.clj
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
(defrecord Nobel [prize])
|
||||||
|
(deftype Pulitzer [prize])
|
||||||
|
|
||||||
|
(defprotocol Award
|
||||||
|
(present [this recipient]))
|
||||||
|
|
||||||
|
(defrecord Oscar [category]
|
||||||
|
Award
|
||||||
|
(present [this recipient]
|
||||||
|
(print (str "Congratulations on your "
|
||||||
|
(:category this) " Oscar, "
|
||||||
|
recipient
|
||||||
|
"!"))))
|
||||||
|
|
||||||
|
(deftype Razzie [category]
|
||||||
|
Award
|
||||||
|
(present [this recipient]
|
||||||
|
__))
|
||||||
|
|
||||||
|
(meditations
|
||||||
|
"Holding records is meaningful only when the record is worthy of you"
|
||||||
|
(= __ (.prize (Nobel. "peace")))
|
||||||
|
|
||||||
|
"Types are quite similar"
|
||||||
|
(= __ (.prize (Pulitzer. "literature")))
|
||||||
|
|
||||||
|
"Records may be treated like maps"
|
||||||
|
(= __ (:prize (Nobel. "physics")))
|
||||||
|
|
||||||
|
"While types may not"
|
||||||
|
(= __ (:prize (Pulitzer. "poetry")))
|
||||||
|
|
||||||
|
"Further study reveals why"
|
||||||
|
(= __
|
||||||
|
(map map? [(Nobel. "chemistry")
|
||||||
|
(Pulitzer. "music")]))
|
||||||
|
|
||||||
|
"Either sort of datatype can define methods in a protocol"
|
||||||
|
(= __
|
||||||
|
(with-out-str (present (Oscar. "Best Picture") "Evil Alien Conquerors")))
|
||||||
|
|
||||||
|
"Surely we can implement our own by now"
|
||||||
|
(= "You're really the Worst Picture, Final Destination 5... sorry."
|
||||||
|
(with-out-str (present (Razzie. "Worst Picture") "Final Destination 5"))))
|
||||||
|
|
@ -143,6 +143,17 @@
|
|||||||
''(+ 9 1)
|
''(+ 9 1)
|
||||||
''(* 10 2)
|
''(* 10 2)
|
||||||
''(+ 10 (2 * 3))]}
|
''(+ 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!"
|
||||||
|
]}
|
||||||
})
|
})
|
||||||
|
|
||||||
(defn replace-with [s k replacements]
|
(defn replace-with [s k replacements]
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
"recursion"
|
"recursion"
|
||||||
"destructuring"
|
"destructuring"
|
||||||
"refs"
|
"refs"
|
||||||
"macros"])
|
"macros"
|
||||||
|
"datatypes"])
|
||||||
|
|
||||||
(defn require-version [[required-major required-minor]]
|
(defn require-version [[required-major required-minor]]
|
||||||
(let [{:keys [major minor]} *clojure-version*]
|
(let [{:keys [major minor]} *clojure-version*]
|
||||||
|
Loading…
Reference in New Issue
Block a user