許されている節のすべての集合をリストする前に、単にloop
言語の
感じを掴むためにいくつかのループの例を見てみよう。
(loop for buf in (buffer-list) collect (buffer-file-name buf))
このループは、buffer-list
によって戻されたリストを使いながら、
すべてのEmacsバッファ上を繰り返す。それぞれのバッファbuf
に
対して、buffer-file-name
を呼び出して結果をリストに集積する。
リストはその後loop
構文要素から戻される。結果はEmacsの
メモリにあるすべてのバッファのファイル名のリストである。語for
や
in
、collect
はloop
言語の中で予約語である。
(loop repeat 20 do (insert "Yowsa\n"))
このループは現バッファに句“Yowsa”を20回挿入する。
(loop until (eobp) do (munch-line) (forward-line 1))
このループは、バッファの終わりまでのすべての行でmunch-line
を
呼び出す。ポイントがすでにバッファの終わりにある場合、ループはすぐに
脱出する。
(loop do (munch-line) until (eobp) do (forward-line 1))
このループは上述のものと類似しているが、munch-line
は常に最低
1度は呼び出される。
(loop for x from 1 to 100 for y = (* x x) until (>= y 729) finally return (list x (= y 729)))
より複雑なこのループは、その2乗が729である数x
を検索する。
安全のために100までのx
値だけを調べる; 句‘to 100’を
省略することは、ループが上方へ無制限に数えることを引き起こすだろう。
2番目のfor
節はループの中でx
の2乗になるようにy
を
定義する; =
記号の後の式はループを通して毎回再評価される。
until
節はループの終了用の条件を与え、finally
節は
ループが終わったとき何をするかを言う。(この特別の例は、単に
説明のために、可能なものよりも簡潔ではなく書かれた。)
このループは、それ自身でループを定義するのに十分な3個の節(2個は
for
で1個はuntil
)を含んでいるが、それでも3重の入れ子の
ループの一種ではなく1個のループをつくる。入れ子のループがほしい場合、
明示的にloop
構文要素を入れ子にしなければならない。