11.1.4 带递减计数器的循环

编写 while 循环的另一种常用方式是将条件设为判断计数器是否大于 0。只要计数器大于 0,循环就继续执行;当计数器小于或等于 0 时,循环停止。要实现这一点,计数器初始值必须大于 0,并通过重复执行的表达式不断减小。

判断条件可以是类似 (> counter 0) 的表达式:当 counter 大于 0 时返回真 t,等于或小于 0 时返回假 nil。让数值不断减小的表达式可以用简单的 setq 实现,例如 (setq counter (1- counter)),其中 1- 是 Emacs Lisp 内置函数,作用是将参数减 1。

递减 while 循环的结构如下:

(while (> counter 0)                    ; true-or-false-test
  body...
  (setq counter (1- counter)))          ; decrementer