史莱姆在我的Clojure repl中抛出了“变量绑定深度超过max-specpdl-size”

时间:2011-12-14 07:25:17

标签: emacs clojure read-eval-print-loop slime swank

我的clojure repl开始抛出“变量绑定深度超过max-specpdl-size”错误,我已经被抛入调试器。

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

  

用户选项:max-specpdl-size

     

此变量定义了在Emacs发出错误信号之前允许的局部变量绑定和展开保护清理总数限制(请参阅清除非局部退出)(数据“变量绑定深度超过max-specpdl-size “)。

     

此限制以及超出时的相关错误是Lisp避免对定义不明的函数进行无限递归的一种方法。 max-lisp-eval-depth提供了嵌套深度的另一个限制。见Eval。

     

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

我几乎没有调试clojure-swank / slime的经验,所以我希望有人可以提供帮助。

修改 我正在使用clojure-mode 1.11.4和emacs 24以及clojure 1.3.0,我没有安装swank-clojure,我正在使用捆绑了clojure-mode的那个通过clojure-jack-in进行解释早。

1 个答案:

答案 0 :(得分:0)

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

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

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