これらの節は、ループが指定されたLispのformに関する情報を
蓄積するようにする。蓄積された結果は、たとえばreturn
節によって
無効にされない限りループから戻される。
collect form
この節はformの値をリストに集積する。collect
のいくつかの
例がこのマニュアルの他のところで現れる。
語collecting
はcollect
の同義語であり、同様に他の蓄積節の
同義語でもある。
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)