Next: , Previous: , Up: ループ機能   [Contents][Index]


4.7.2 ループの例

許されている節のすべての集合をリストする前に、単にloop言語の 感じを掴むためにいくつかのループの例を見てみよう。

(loop for buf in (buffer-list)
      collect (buffer-file-name buf))

このループは、buffer-listによって戻されたリストを使いながら、 すべてのEmacsバッファ上を繰り返す。それぞれのバッファbufに 対して、buffer-file-nameを呼び出して結果をリストに集積する。 リストはその後loop構文要素から戻される。結果はEmacsの メモリにあるすべてのバッファのファイル名のリストである。語forincollectloop言語の中で予約語である。

(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構文要素を入れ子にしなければならない。