我觉得使用宏对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中看起来非常自然。