11.1.4 带有递减计数器的循环

另一种常见的编写 while 循环的方式是编写测试,使其确定计数器是否大于零。只要计数器大于零,循环就会重复。但当计数器等于或小于零时,循环停止。为使此方法有效,计数器必须从大于零开始,然后通过一个可重复评估的形式逐渐减小。

测试将是诸如 (> counter 0) 的表达式,如果 counter 的值大于零,则返回 t 为 true,如果 counter 的值等于或小于零,则返回 nil 为 false。使数字逐渐减小的表达式可以是一个简单的 setq,例如 (setq counter (1- counter)),其中 1- 是 Emacs Lisp 中减去其参数的内置函数。

递减 while 循环的模板如下:

(while (> counter 0)                    ; 真或假测试
  body…
  (setq counter (1- counter)))          ; 递减器