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