解释性条件评估,和monads?

时间:2013-08-07 04:04:05

标签: macros clojure monads

我需要像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->要走的路?

0 个答案:

没有答案