当我在使用clojure的逻辑工具(core.logic)实现编译器静态分析时,这个宏有点有用。
(defmacro ==>> (link: 表达式-in & 关系形式)
"通过关系形式线程表达式-in,然后与最后一个关系形式(即将的'输出表达式')统一。
。)
示例
(==>> (link: [1]) (firsto) (firsto) x))
;; 'x' will become bound to value 1
这个宏展开为
(fresh (link: _A _B)
(firsto (link: [1]) _A)
(firsto _A _B)
(== _B q))
如果你想象firsto的'返回值'是其最后一个参数,
那么它就像clojure.core/->一样工作,每个表述的返回值是
下一个表述的第一个参数。