forked from johnlawrenceaspden/hobby-code
-
Notifications
You must be signed in to change notification settings - Fork 0
/
multimethods.clj
36 lines (24 loc) · 884 Bytes
/
multimethods.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
;; Clojure Multimethods
(defn ticket [age]
(cond (< age 16) :child
(> age 64) :ancient
:else :adult))
(defrecord person [name age])
(defmulti print-name (fn [person] (ticket (:age person))))
(defmethod print-name :child [person] (str "Young " (:name person)))
(defmethod print-name :adult [person] (str "Mr " (:name person)))
(defmethod print-name :ancient [person] (str "Old Mr " (:name person)))
(map print-name (list (person. "Fred" 23)
(person. "Jimmy" 12)
(person. "Seth" 78)))
;; And an alternative version
(defn pname [person]
(str
(case (ticket(:age person))
:child "Young "
:adult "Mr "
:ancient "Old Mr ")
(:name person)))
(map pname (list (person. "Fred" 23)
(person. "Jimmy" 12)
(person. "Seth" 78)))