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 版本上是可行的。你能给我更多关于你的配置的详细信息,让我试着重现这个问题吗?我在 OS X 10.8 上运行 JDK 7 64位。

0
by

由:austinhaas 评论

我再也看不到这个问题了,但当我报告这个问题时,我正在使用 Java 1.6,现在我正在使用

$ java -version
java version "1.7.0_15"
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

0
by

由:dnolen 评论

好的,谢谢您的快速回应,我会检查一下在 1.6 下的情况。

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