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 报告)
...