macro | since v0.0-1798 | imported clojure.core/cond->> | Edit |
(cond->> expr & clauses)
Takes an expression and a set of test/form pairs. Threads expr
(via ->>
)
through each form for which the corresponding test expression is true.
Note that, unlike cond
branching, cond->>
threading does not short circuit
after the first true test expression.
(def filter? true)
(def sum? true)
(cond->> [1 2 3 4]
filter? (filter even?)
sum? (reduce +))
;;=> 6
Takes an expression and a set of test/form pairs. Threads expr (via ->>) through each form for which the corresponding test expression is true. Note that, unlike cond branching, cond->> threading does not short circuit after the first true test expression.
(defmacro cond->>
{:added "1.5"}
[expr & clauses]
(assert (even? (count clauses)))
(let [g (gensym)
steps (map (fn [[test step]] `(if ~test (->> ~g ~step) ~g))
(partition 2 clauses))]
`(let [~g ~expr
~@(interleave (repeat g) (butlast steps))]
~(if (empty? steps)
g
(last steps)))))