次の Clojure コードはcore.logic
、2 つの異なる順序で同じ目標を持つ同じ論理問題を解決するために使用します。このような順序の選択により、一方はすぐに終了し、もう一方はハングします。
(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]))))
この問題を回避するための一般的な解決策または一般的な方法はありますか?