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