• (cond-let bindings & clauses)
Takes a binding-form and a set of test/expr pairs. Evaluates each test
one at a time. If a test returns logical true, cond-let evaluates and
returns expr with binding-form bound to the value of test and doesn't
evaluate any of the other tests or exprs. To provide a default value
either provide a literal that evaluates to logical true and is
binding-compatible with binding-form, or use :else as the test and don't
refer to any parts of binding-form in the expr. (cond-let binding-form)
returns nil.

1 Example top

  • (cond-let [[a b c]]
      nil     (assert false)
      [5 2 3] (+ a b c))
    ;; => 10
    
Log in to add / edit an example.

See Also top

  • 0
    clojure.core/cond

    Takes a set of test/expr pairs. It evaluates each test one at a tim

Log in to add a see also.

Plus_12x12 Minus_12x12 Source clojure/contrib/cond.clj:18 top

(defmacro cond-let
  "Takes a binding-form and a set of test/expr pairs. Evaluates each test
  one at a time. If a test returns logical true, cond-let evaluates and
  returns expr with binding-form bound to the value of test and doesn't
  evaluate any of the other tests or exprs. To provide a default value
  either provide a literal that evaluates to logical true and is
  binding-compatible with binding-form, or use :else as the test and don't
  refer to any parts of binding-form in the expr. (cond-let binding-form)
  returns nil."
  [bindings & clauses]
  (let [binding (first bindings)]
    (when-let [[test expr & more] clauses]
      (if (= test :else)
        expr
        `(if-let [~binding ~test]
           ~expr
           (cond-let ~bindings ~@more))))))
Vars in clojure.contrib.cond/cond-let: = binding defmacro let test when-let apply concat if-let list seq vector
Used in 0 other vars

Comments top

No comments for cond-let. Log in to add a comment.