我需要像cond->这样的东西。返回结果以及评估为true的分支以给出该结果。理想情况下,应该可以将解释性部分仅用于测试和文档,并使其成为正常的条件。正在使用。我修改了cond->像这样:
(defmacro explanatory-cond->
"Adapted from Clojure's cond-> macro to keep a list of which conditions passed during evaluation"
[expr & clauses]
(assert (even? (count clauses)))
(let [g (gensym)
pstep
(fn [[test step]]
`(if ~test
[(-> (if (vector? (first ~g)) (ffirst ~g) (first ~g)) ~step)
(cons [(quote ~test) (quote ~step) (first ~g)] (second ~g))]
~g)
)
]
`(let [~g [~expr nil]
~@(interleave (repeat g) (map pstep (partition 2 clauses)))]
~g)))
这似乎有用,但是从我对monad的浅层知识看起来可能有一个案例供他们在这里使用(装箱和拆箱那个矢量) - 任何大师的评论都可以这样吗&如果是这样,如何去做,如果不是这样的修改cond->要走的路?