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


4.7.5 蓄積節

これらの節は、ループが指定されたLispのformに関する情報を 蓄積するようにする。蓄積された結果は、たとえばreturn節によって 無効にされない限りループから戻される。

collect form

この節はformの値をリストに集積する。collectのいくつかの 例がこのマニュアルの他のところで現れる。

collectingcollectの同義語であり、同様に他の蓄積節の 同義語でもある。

append form

この節は、appendを使って値のリストを結果のリストへ集積する。

nconc form

この節は、リストをコピーするのではなく破壊的に修正することで値のリスト を結果のリストへ集積する。

concat form

この節は指定されたformの値を文字列へ連結する。(これや下記の節は 標準Common Lispへの拡張である。)

vconcat form

この節は指定されたformの値をベクタへ連結する。

count form

この節は、指定されたformが非nil値へ評価される回数を数える。

sum form

この節は指定されたformの値の合計を蓄積する。formは 評価されて数にならなければならない。

maximize form

この節は指定されたformの値の最大値を蓄積する。formは 評価されて数にならなければならない。maximizeが1度も 実行されなかった場合、戻り値は未定義である。

minimize form

この節は指定されたformの最小値を蓄積する。

蓄積節は、無名の一時変数ではなく変数var(これはループ中に自動的に let束縛される)にデータを集積するようにするために、 ‘into var’を続けることができる。またinto蓄積は、 自動的には戻り値を含まない。蓄積された結果を戻すためには、ループは finally returnのようななんらかの明示的なメカニズムを 使わなければならない。

同じ型のいくつかの蓄積節が同じ場所に蓄積することは正しい。Steeleから:

(loop for name in '(fred sue alice joe june)
      for kids in '((bob ken) () () (kris sunshine) ())
      collect name
      append kids)
     ⇒ (fred bob ken sue alice joe kris sunshine june)