Add datatypes.

This commit is contained in:
Colin Jones 2011-02-10 19:13:52 -06:00
parent c604126a4e
commit ebe856b45d
3 changed files with 58 additions and 1 deletions

45
src/koans/datatypes.clj Normal file
View 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"))))

View File

@ -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]

View File

@ -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*]