以下 Clojure 代码用于core.logic
以两种不同的顺序解决具有相同目标的相同逻辑问题。这种排序选择导致一个快速完成而另一个挂起。
(use `clojure.core.logic)
;; Runs quickly. Prints (1 2 3).
(clojure.pprint/pprint (run* [q] (fresh [x] (== x [1,2,3])
(membero q x))))
;; Hangs
(clojure.pprint/pprint (run* [q] (fresh [x] (membero q x)
(== x [1,2,3]))))
是否有避免此问题的通用解决方案或常见做法?