Emacs Slime正在抛出一个;可变装订深度超过最大specpdl尺寸”;在我的Clojure回复中

Emacs Slime正在抛出一个;可变装订深度超过最大specpdl尺寸”;在我的Clojure回复中,emacs,clojure,read-eval-print-loop,slime,swank,Emacs,Clojure,Read Eval Print Loop,Slime,Swank,我的clojure repl开始抛出“变量绑定深度超过最大specpdl大小”错误,我被抛出到调试器中 我目前正在通过clojure jack-in访问slime,并在一个大小合理的数据集上执行reduce。一点谷歌搜索让我相信错误是因为我生成了太多的临时变量,特别是: 用户选项:最大specpdl大小 此变量定义了在Emacs发出错误信号(数据为“变量绑定深度超过最大specpdl大小”)之前允许的局部变量绑定和展开保护清理(请参阅从非本地出口清理)总数的限制 此限制以及超出此限制时的相关错误

我的clojure repl开始抛出“变量绑定深度超过最大specpdl大小”错误,我被抛出到调试器中

我目前正在通过clojure jack-in访问slime,并在一个大小合理的数据集上执行reduce。一点谷歌搜索让我相信错误是因为我生成了太多的临时变量,特别是:

用户选项:最大specpdl大小

此变量定义了在Emacs发出错误信号(数据为“变量绑定深度超过最大specpdl大小”)之前允许的局部变量绑定和展开保护清理(请参阅从非本地出口清理)总数的限制

此限制以及超出此限制时的相关错误是Lisp避免在定义不正确的函数上无限递归的一种方法。最大lisp eval depth为嵌套深度提供了另一个限制。见评估

默认值为1000。如果剩下的空间很小,则进入Lisp调试器会增加该值,以确保调试器本身有执行的空间。

我几乎没有调试clojure swank/slime的经验,所以我希望有人能帮助我

编辑:
我正在使用clojure模式1.11.4与emacs 24和clojure 1.3.0,我没有安装swank clojure,我正在使用通过clojure jack in与clojure模式捆绑在一起的模式,正如我前面解释的那样。

以防万一有人在寻找这个问题的可能答案

正如所概述的,这个错误通常意味着一个问题,但并非总是如此。在具有大型数据结构或使用某些emacs功能(如defadvice)的情况下,您可以合法地超过默认深度设置,这可能会导致深度绑定等。您可以增加深度,看看这是否有帮助(例如,增加一倍),但在这种情况下,这可能是一个错误


swank clojure的一个问题是它与旧版本的黏液紧密结合。这意味着slime中的改进和错误修复不可用。正是由于这种紧密的结合,coljure社区从使用黏液转向使用苹果酒,我强烈建议改用苹果酒,而不是黏液和swank clojure

我希望在解析REPL语句的输出时会出现问题。您使用的clojure mode、swank clojure、emacs和clojure的版本是什么?您是否都是最新版本?你能在SLIME REPL上可靠地重现问题吗?你想计算的clojure表达式是什么?这是什么版本的swank clojure?我知道你说你还没有安装它,但你必须要在lein方面安装clojure插件才能工作。关于我正在使用的插件,我不知道如何让swank说出它是哪个版本,我已经安装了
swank clojure
1.3.2
1.3.3-SNAPSHOT
。键入random,语法错误的字符会在我的机器上触发此错误。因此,删除伪令牌(如果有的话)可以解决这个问题。