2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面获取更多关于如何使用本站的信息。

0
core.logic

Clojure中的遍历集合并会导致StackOverFlowError

`
(run* [?s] (== ?s #{1 2 3}))

(let [s #{1 2 3}] (run* [?s] (== ?s s)))

(run* [?convertedseq ?seq]
(== ?seq #{1 2 3})
(project [?seq]

(== ?convertedseq (vector ?seq))))

`

`
StackOverflowError

clojure.core.logic/walk*/fn--2722 (logic.clj:216)
clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
clojure.core.logic/walk* (logic.clj:214)
clojure.core.logic/walk*/fn--2722 (logic.clj:218)
clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
clojure.core.logic/walk* (logic.clj:214)
clojure.core.logic/walk*/fn--2722 (logic.clj:218)
clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
clojure.core.logic/walk* (logic.clj:214)

`

3 个答案

0

评论者:dnolen

core.logic不再支持集合的统一,因此您看到了根本不支持的错误。我不反对支持完全根集的基本统一,因为那时我们只需要测试相等性,但是我倾向于在集合中出现任何逻辑变量时抛出系统错误。

0

评论者:norman

LOGIC-154的修复建议解决了这个问题。

0
参考:https://clojure.atlassian.net/browse/LOGIC-130 (由 alex+import Reporting)
...