Emacs Lisp 有两种主要方式可以重复执行一个或一系列表达式:
一种使用 while 循环,
另一种使用 递归(recursion)。
重复执行非常有用。例如,要向前移动四个句子, 只需编写程序实现“向前移动一个句子”并重复四次即可。 计算机不会感到枯燥或疲惫,因此这类重复操作 不会像对人那样产生过度或不当重复带来的负面影响。
人们编写 Emacs Lisp 函数时大多使用 while 循环
及其同类结构;但你也可以使用递归,
递归提供了一种非常强大的思考与解决问题的方式15。
编写递归函数时,可以选择节省或消耗计算与心智资源。
有趣的是,人类易于理解、节省心智的写法,
有时会占用较多计算机资源。Emacs 设计之初运行在
如今看来配置有限的机器上,默认设置较为保守。
你可能需要增大 max-lisp-eval-depth 的值。
我在 .emacs 文件中将其设为默认值的 30 倍。