【发布时间】:2011-12-14 07:25:17
【问题描述】:
我的 clojure repl 开始抛出“变量绑定深度超过 max-specpdl-size”错误,我已经进入调试器。
我目前正在通过 clojure-jack-in 访问 slime,并且正在对合理大小的数据集执行 reduce。一些谷歌搜索让我相信这个错误是因为我生成了太多的临时变量,特别是:
用户选项:max-specpdl-size
此变量定义了在 Emacs 发出错误信号之前允许的局部变量绑定和展开保护清理(请参阅从非本地退出清理)的总数限制(数据“变量绑定深度超过 max-specpdl-size ")。
这个限制,以及当它被超过时的相关错误,是 Lisp 避免对定义不明确的函数进行无限递归的一种方式。 max-lisp-eval-depth 提供了嵌套深度的另一个限制。请参阅评估。
默认值为 1000。进入 Lisp 调试器会增加该值,如果剩余空间很小,以确保调试器本身有执行空间。 found here.
我在调试 clojure-swank/slime 方面经验很少,所以希望有人能提供帮助。
编辑: 我正在使用带有 emacs 24 和 clojure 1.3.0 的 clojure-mode 1.11.4,我没有安装 swank-clojure,我正在使用通过 clojure-jack-in 与 clojure-mode 捆绑在一起的一个,正如我解释的那样早一点。
【问题讨论】:
-
我预计在解析您的 REPL 语句的输出时会出现问题。您正在使用哪些版本的 clojure-mode、swank-clojure、emacs、clojure - 您是否都是最新版本?你能在 SLIME REPL 上可靠地重现问题吗?您要评估的 clojure 表达式是什么?
-
这是什么版本的 swank-clojure?我知道你说你还没有安装它,但你必须在 lein 方面有 clojure-jack-in 才能工作。
-
关于我正在使用的插件,我不确定如何才能说出它是哪个版本,我已经安装了
swank-clojure1.3.2和1.3.3-SNAPSHOT。跨度> -
输入随机的、语法不正确的字符会在我的机器上触发此错误。因此,删除虚假令牌(如果有)可能会解决问题。
标签: emacs clojure read-eval-print-loop slime swank