GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Decrementing-Loop.html ・ emacs-doc.conao3.com

11.1.4 デクリメントカウンタを用いたループ

while ループを記述するもう一つの一般的な方法は、カウンタが 0 より大きいかどうかを判定するようにテストを記述することです。カウンタが 0 より大きい限り、ループは繰り返されます。しかし、カウンタが 0 以下になると、ループは停止します。これが機能するためには、カウンタが最初から 0 より大きく、かつ繰り返し評価される式によって次第に小さくなっていく必要があります。

テストには (> counter 0) のような式が用いられ、counter の値が 0 より大きい場合は真として t を、counter の値が 0 以下の場合は偽として nil を返します。数値をどんどん小さくしていく式としては、(setq counter (1- counter)) のような単純な setq が挙げられます。ここで 1- は、引数から 1 を引く Emacs Lisp の組み込み関数です。

デクリメントする while ループのテンプレートは次のようになります。

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