clojure.core.logic 似乎在步行集上有问题。最小的失败示例:
(run* [q] (== q #{}))
生产
java.lang.StackOverflowError at clojure.core.logic.Substitutions.walk(logic.clj:344) at clojure.core.logic$walk_STAR_$fn_ 2633.invoke(logic.clj:216) at clojure.core.logic$eval2838 $fn _2839.invoke(logic.clj:956) at clojure.core.logic.protocols$eval1389$fn_ 1390$G _1380__1397.invoke(protocols.clj:55) at clojure.core.logic$walk_STAR_.invoke(logic. clj:214) at clojure.core.logic$walk_STAR_$fn_ 2633.invoke(logic.clj:218) at clojure.core.logic$eval2838$fn _2839.invoke(logic.clj:956) at clojure.core.logic .protocols$eval1389$fn_ 1390$G _1380__1397.invoke(protocols.clj:55) at clojure.core.logic$walk_STAR_.invoke(logic.clj:214) at clojure.core.logic$walk_STAR_$fn_2633.invoke(logic.clj:218) at clojure.core.logic$eval2838$fn _2839.invoke(logic.clj:956) at clojure.core.logic.protocols$eval1389$fn_ 1390$G _1380__1397.invoke(protocols .clj:55) 在 clojure.core.logic$walk_STAR_.invoke(logic.clj:214) 在 clojure.core.logic$walk_STAR_$fn_2633.invoke (logic.clj:218) 在 clojure.core.logic$eval2838 $fn _2839.invoke(logic.clj:956) at clojure.core.logic.protocols$eval1389$fn_ 1390$G _1380__1397.invoke(protocols.clj:55)
为什么这会生成 Stackoverflow?与空向量/列表/地图/其他类型统一按预期工作。