在为 core.logic 实现静态分析时,这个宏有些有用。
(defmacro ==>> (expr-in & rel-forms)
通过 rel-forms 将 expr-in 线程化,然后与最后 rel-forms 的
("输出表达式的")统一。
示例
(==>> (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/-> 一样工作,因为每个表达式的返回值
都是下一个表达式的第一个参数。