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 的评论

我认为溢出发生在再现实化过程中。

我得到这个错误信息是在从 run 返回结果时,但现在我将相同的值用作另一个目标的输入,就没有溢出。

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

0

用户 dnolen 的评论

这对于 master 上的我来说有效。您能提供更多有关您的配置的具体信息吗?这样我就可以尝试重现它。我在运行 JDK 7 64位 OS X 10.8。

0

用户 austinhaas 的评论

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

$ java -version
java version "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报告)
...