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](https://clojure.atlassian.net/browse/LOGIC-114) (由austinhaas报告)
...