clojure-koans/src/koans/15_refs.clj
Colin Jones 78c5704f34 Rename to use underscores instead of dashes
Works fine either way - this is just since underscores are required
in filenames for real projects, so it's something good for folks to
get used to.
2012-06-08 15:22:42 -05:00

39 lines
1.1 KiB
Clojure

(def the-world (ref "hello"))
(def bizarro-world (ref {}))
(meditations
"In the beginning, there was a word"
(= __ (deref the-world))
"You can get the word more succinctly, but it's the same"
(= __ @the-world)
"You can be the change you wish to see in the world."
(= __ (do
(dosync (ref-set the-world "better"))
@the-world))
"Alter where you need not replace"
(= __ (let [exclamator (fn [x] (str x "!"))]
(dosync
(alter the-world exclamator)
(alter the-world exclamator)
(alter the-world exclamator))
@the-world))
"Don't forget to do your work in a transaction!"
(= 0 (do __
@the-world))
"Functions passed to alter may depend on the data in the ref"
(= 20 (do
(dosync (alter the-world ___))))
"Two worlds are better than one"
(= ["Real Jerry" "Bizarro Jerry"]
(do
(dosync
(ref-set the-world {})
(alter the-world assoc :jerry "Real Jerry")
(alter bizarro-world assoc :jerry "Bizarro Jerry")
__))))