Control Flow
(if (> 3 2) "yes" "no") ; if requires a then; else is optional (nil)
(if-not false "ran")
(when (> 3 2) ; multiple forms, no else
(println "three is bigger")
:done)
(when-not false :ok)
(cond
(< n 0) "negative"
(= n 0) "zero"
:else "positive")
(condp = color ; compare against a predicate
:red "stop"
:green "go"
"unknown")
(case day ; constant-time dispatch on literals
(:sat :sun) "weekend"
:mon "start of week"
"weekday") ; default
(if-let [user (find-user 42)] ; bind and test
(str "Found " (:name user))
"Not found")
(when-let [x (first coll)] (println x))
(if-some [v (get m :k)] v :missing) ; tests for non-nil (false is allowed)
(when-some [v false] [:value v]) ; [:value false]
(and 1 2 3) ; 3
(or nil false :default) ; :default
(not true) ; false
(do (println "side effect") 42) ; evaluate several forms, return the last