ClojureDocs

Nav

Namespaces

or

clojure.core

Available since 1.0 (source)
  • (or)
  • (or x)
  • (or x & next)
Evaluates exprs one at a time, from left to right. If a form
returns a logical true value, or returns that value and doesn't
evaluate any of the other expressions, otherwise it returns the
value of the last expression. (or) returns nil.
6 Examples
user> (or true false false)
true

user> (or true true true)
true

user> (or false false false)
false

user> (or nil nil)
nil

user> (or false nil)
nil

user> (or true nil)
true

;; or doesn't evaluate if the first value is true
user> (or true (println "foo"))
true

;; order matters
user> (or (println "foo") true)
foo
true

;; does not coerce a given value to a boolean true, returns the value
user> (or false 42)
42

user> (or false 42 9999)
42

user> (or 42 9999)
42
;; See examples for "if" explaining Clojure's idea of logical true
;; and logical false.
;;evaluates last expression for this case
user> (or nil false)
false

user> (or false nil)
nil
;; Defaulted value
user> (or nil "crazy default value")
crazy default value

user> (or "value" "not useful default value")
value
;; It cares about function's return. Example:
;; println returns 'nil', so the next param will be evaluated.
(or (println "Clojure") true "Code" false)
Clojure
;;=>true
;; `or` is a macro, so can't be given where a fn is expected
(map or [true false] [false false])
;; => Syntax error compiling at…
;; => Can't take value of a macro: #'clojure.core/or

;; wrap in a fn instead
(map #(or %1 %2) [true false] [false false])
;; => (true false)
See Also

Evaluates exprs one at a time, from left to right. If a form returns logical false (nil or false),...

Added by j1n3l0

Evaluates test.

Added by jafingerhut

Takes a set of predicates and returns a function f that returns the first logical true value retur...

Added by MicahElliott
0 Notes
No notes for or