我的 clojure repl 开始抛出“变量绑定深度超过 max-specpdl-size”错误,我被扔进了调试器。
我目前正在通过 clojure-jack-in 访问粘液,并且正在对合理大小的数据集执行缩减。一些谷歌搜索让我相信这个错误是因为我生成了太多的临时变量,特别是:
用户选项:max-specpdl-size
此变量定义了在 Emacs 发出错误信号之前允许的局部变量绑定和展开保护清理(请参阅从非本地退出清理)总数的限制(数据“变量绑定深度超过 max-specpdl-size”)。
这个限制,以及当它被超过时的相关错误,是 Lisp 避免对定义不明确的函数进行无限递归的一种方式。max-lisp-eval-depth 提供了嵌套深度的另一个限制。见评估。
默认值为 1000。进入 Lisp 调试器会增加该值,如果剩余空间很小,以确保调试器本身有执行空间。 在这里找到。
我对调试 clojure-swank/slime 的经验很少,所以我希望有人能提供帮助。
编辑: 我正在使用带有 emacs 24 和 clojure 1.3.0 的 clojure-mode 1.11.4,我没有安装 swank-clojure,我使用的是通过 clojure-jack-in 与 clojure-mode 捆绑在一起的一个我之前解释过。