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 提供

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

当我在运行结果时遇到这个错误,现在我使用相同的值作为另一个目标输入,就没有溢出了。

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

0

评论由:dnolen 提供

我在主分支上测试了这个,它能运行。你能提供更多有关你设置的具体信息,以便我尝试重现吗?我在 OS X 10.8 上运行 JDK 7 64位。

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 提供

好的,感谢您的快速回复,我会检查一下Java 1.6下的事情看起来如何。

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