我觉得与宏 `if
` 和 `cond
` 相配套的宏忽略了 `if-let
` 的配套宏。
(defmacro cond-let
[& clauses]
(when clauses
(if (next clauses)
(list 'if-let (first clauses)
(second clauses)
(cons 'cond-let (nnext clauses)))
(first clauses))))
(cond-let [a nil] {:a a}
[b false] {:b b}
:default)
我没有找到以前是否讨论过这种 `cond-let
` 变体(不引入太多新语法)的宏,但总体来看,它对于 `clolure.core` 来说是很自然的。