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

欢迎!请查看关于页面以了解更多信息。

0
core.logic

`
(ns test
(:refer-clojure :exclude [==])
(:require
[clojure.core.logic :refer :all]))

(defn foo [in out]
(matcha
[in out]
([('and a b . ()) ('and x y . ())] (foo a x) (foo b y))
([a ('bar ('baz a . ()) . ())])))

;; 下面代码会导致栈溢出,但删除一个合取后就会运行。

(run 1 [q] (foo

        '(and p
              (and p
                   (and p
                        (and p
                             (and p
                                  (and p
                                       (and p
                                            (and p
                                                 (and p
                                                      (and p
                                                           (and p p)))))))))))
        q))

`

6个答案

0

由dnolen发布的评论:

看起来即使在将matcha与matche交换时,这个问题仍然存在。

0

由austinhaas发布的评论:

我认为溢出发生在语义化(reification)过程中。

我在返回run的结果时遇到了这个错误,但现在我将相同的值作为另一个目标的输入时就没有溢出了。

如果你在foo调用中将q替换为一个新的变量,它就不会溢出。

0

由dnolen发布的评论:

这个在master上对我有效。你能给我更多关于你设置的具体信息,以便我尝试重现这个问题吗?我使用的是OS X 10.8和64位JDK 7。

0

由austinhaas发布的评论:

我再也看不到这个问题了,但我相信我在报告这个问题时使用的是Java 1.6,现在我使用的是

$ java -version
java 版本 "1.7.0_15"
Java(TM) SE 运行时环境 (构建 1.7.0_15-b03)
Java HotSpot(TM) 64位服务器虚拟机 (构建 23.7-b01,混合模式)

0

由dnolen发布的评论:

好的,谢谢快速回复,我会再次检查1.6版本下的情况。

0
参考: https://clojure.atlassian.net/browse/LOGIC-114 (由 austinhaas 报告)
...