目前我找不到一种方法来启用自定义数据类型,以便在两个方向上与顺序对象进行统一。您可以使用 IUnifyTerms 在一个方向上使其工作,但不可能使其在另一个方向上工作(即当顺序对象首先存在时)。
问题似乎出在以下代码中
`
(defn unify-with-sequential* [u v s]
(cond
(sequential? v)
(if (and (counted? u) (counted? v)
(not= (count u) (count v)))
nil
(loop [u u v v s s]
(if (seq u)
(if (seq v)
(if-let [s (unify s (first u) (first v))]
(recur (next u) (next v) s)
nil)
nil)
(if (seq v) nil s))))
(lcons? v) (unify-terms v u s)
:else nil))
`
如果最终的 nil 可以替换为对一个协议的调用(IUnifyTermsReversed ???IUnifyWithSequential ???),那么我相信这将使它可扩展。