Elisp递归最大深度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elisp递归最大深度相关的知识,希望对你有一定的参考价值。
我有一个快速的问题。我理解递归。我也理解为什么需要实现递归的深度限制。我的问题涉及何时显示最大深度误差的随机性。
考虑以下方法,它只是将所有数字从1添加到传入的值:
(defun sum (x)
(cond
((= x 0) 0)
(t (+ x (sum (- x 1))))))
如果我打电话:
(sum 50)
我明白了:
1275
如果我打电话:
(sum 100)
我明白了:
Debugger entered--Lisp error: (error "Lisp nesting exceeds `max-lisp-eval-depth'")
这没关系,但现在我解雇调试器并调用:
(sum 50)
我得到与(sum 100)
相同的错误消息。
为什么错误消息似乎不一致?我会假设在将值返回到50之后,它会像之前那样正常计算。我需要在某处重置一些标志吗?也许我只是误解了错误信息。任何帮助将不胜感激。
编辑:我忘了添加,如果我退出Emacs并重新打开它,我能够再次计算50作为参数的值,但是一旦我尝试100的值并得到错误,我再也不能用50了。
答案
*Debugger*
缓冲区就像任何其他缓冲区一样。因此,当您使用窗口移动操作切换到另一个缓冲区时,它对您在调试会话中的事实没有影响。
您可以在模式行中看到显示主模式名称的部分被方括号括起来(如果您在几个这样的recursive-edit
s中,可能会有几个这样的括号)。
您可以通过在c
缓冲区中点击q
(表示“Continue”)或*Debugger*
来退出调试会话。您也可以像任何其他递归编辑一样退出,例如按ESC ESC ESC(keyboard-escape-quit
)或者您也可以使用C-](abort-recursive-edit
)。
以上是关于Elisp递归最大深度的主要内容,如果未能解决你的问题,请参考以下文章