在为 core.logic 进行静态分析时,这个宏有些有帮助。
(defmacro ==>> (link: expr-in & rel-forms)
将 expr-in 穿过 rel-forms 并与最后的 rel-forms(即 'out 表达式')统一。
。
示例
(==>> (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/-> 相似,因为每个表达式的返回值是
下一个表达式的第一个参数。