Does It Know Five
What happens if we try evaluate something else than a number or a fraction? Say, something resembling a word?
user=> five Syntax error compiling at (REPL:0:0). Unable to resolve symbol: five in this context user=>
Now that's interesting. We tried
five and Clojure reports a problem. It doesn't know
five. It hasn't seen its definition so it can't tell us what does it mean. Same goes for
Notice that Clojure refers to
five as a symbol. The cool thing is, we can teach it new symbols. We can make it learn new vocabulary. Specifically, we define new things using
def in a similar way to how we did with
-. We start with the operation, that is with
def, and follow with two arguments: the symbol and the value for which the symbol will stand.
user=> (def five 5) #'user/five
So we typed in
(def five 5) and got back
#'user/five. What the response says is that the user introduced a new definition. From now on, we can use
five in all following interactions with the REPL.
user=> five 5 user=> (+ five 3) 8
Clojure doesn't restrict us here. We could for example redefine
+ to stand for
-. It's not a good idea, though.
user=> (+ 3 2) 5 user=> (def + -) WARNING: + already refers to: #'clojure.core/+ in namespace: user, being replaced by: #'user/+ #'user/+ user=> (+ 3 2) 1
Notice that Clojure warns us when we change the meaning of
+ and replace it with something else. Every other programmer would expect
+ to perform addition. Turning it into something else will be confusing and Clojure lets us know about it. Making our code understandable to our fellow programmers should always be our top priority.