(clj 3) Clojure’s ‘and’ and ‘or’ are weird (but not really)
Early in chapter 3 of the Brave and True-book the Boolean operators and
and or
are introduced:
Clojure uses the Boolean operators
or
andand
.or
returns either the first truthy value or the last value.and
returns the first falsey value or, if no values are falsey, the last truthy value.
This explanation is followed by some examples:
(or false nil :large_I_mean_venti :why_cant_I_just_say_large) ; => :large_I_mean_venti (or (= 0 1) (= "yes" "no")) ; => false (or nil) ; => nil
(and :free_wifi :hot_coffee) ; => :hot_coffee (and :feelin_super_cool nil false) ; => nil
What I found remarkable about this is that and
and or
do not return a boolean in all cases. Before I go into that, let’s back up a second and cover their basics in a little more depth first.