これらの関数は、リストまたは配列の要素上に、指定した関数を“マップ”
する。それらはすべて、組み込み関数mapcar
のテーマの変奏である。
この関数は、その引数列に連続する並列の要素の集合上でfunctionを
呼び出す。1つのseq引数の場合、mapcar
と同等である; n
列の場合、結果のリストの第1要素を生み出すために、それぞれの列の
第1要素をn引数として関数を呼び出す。それから第2要素以降にも
同様に呼び出す。マップは、最も短い列が尽きたらすぐに止まる。引数列は、
リストや文字列、ベクタのいずれの混合でもよい; 戻される列は常に
リストである。
Common Lispのmapcar
は多重引数を受け入れるが、リスト上でのみ
動作する; Emacs Lispのmapcar
は1つの列引数を受け入れる。この
パッケージのmapcar*
は、両方に互換なスーパーセットとして
動作する。
この関数は、ちょうどmapcar*
のように、引数列の上にfunction
をマップするが、リストではなく型result-typeの列を戻す。
result-typeは下記のシンボルの1つでなければならない:
vector
、string
、list
(この場合、効果は
mapcar*
と同じ)、またはnil
(この場合、結果は捨て去られ、
map
はnil
を戻す)。
この関数は、その引数リストのそれぞれの上でfunctionを呼び出して、
それらのリストのcdr
の上で呼び出して、というように最短のリストが
尽きるまで続く。結果はリストのフォーム中に戻される。したがって
maplist
は、前進するポインタのcar
ではなく、リストの
ポインタ自身を通っていく点を除いて、mapcar*
と似ている。
この関数はmapcar*
と似ているが、functionによって戻される
値はリストに集積されるのではなく、無視され捨て去られる点が異なる。
mapc
の戻り値は、第1の列seqである。
この関数はmaplist
に似ているが、functionによって戻される
値を捨て去る点が異なる。
この関数はmapcar*
に似ているが、単に戻り値
(リストでなければならない)を集積するのではなく、nconc
を使って
連結する点が異なる。
この関数はmaplist
に似ているが、nconc
を使って戻り値を
連結する点が異なる。
この関数は、順にseqの各要素にpredicateを呼び出す;
predicateが非nil
を戻す場合、some
はその値を戻し、
そうでなければnil
を戻す。いくつかの列引数が与えられる場合、
ちょうどmapcar*
のように、最短の列が尽きるまで並列に列を通る。
左から右への順序で要素が訪問されることや、predicateが
非nil
を戻すとすぐにマッピングが止まるという事実に依存できる。
この関数は、順に列の各要素にpredicateを呼び出す; predicate
がいずれかの要素でnil
を戻すとすぐにnil
を、述語がすべての
要素で真の場合にt
を戻す。
この関数は、順に列の各要素にpredicateを呼び出す; predicate
がいずれかの要素で非nil
を戻すとすぐにnil
を、述語がすべて
の要素でnil
の場合にt
を戻す。
この関数は、順に列の各要素にpredicateを呼び出す; predicate
がいずれかの要素でnil
を戻すとすぐに非nil
を、述語がすべて
の要素で真の場合にt
を戻す。
この関数は、結合二項演算を使ってseqの要素を結合する。
functionが*
でseqがリスト(2 3 4 5)
だと
仮定する。最初のリストの2つの要素は(* 2 3) = 6
と結合される;
これは次の要素(* 6 4) = 24
と結合され、最後の要素
(* 24 5) = 120
と結合される。*
関数はたまたま
自己縮約的なので、(* 2 3 4 5)
はreduce
への明示的な
呼び出しと同じ効果を持つことに注意せよ。
:from-end
が真の場合、縮約は左結合の代わりに右結合である:
(reduce '- '(1 2 3 4)) ≡ (- (- (- 1 2) 3) 4) ⇒ -8 (reduce '- '(1 2 3 4) :from-end t) ≡ (- 1 (- 2 (- 3 4))) ⇒ -2
:key
が指定された場合、それは順に列の各要素上で呼び出される、
1引数の関数である。
:initial-value
が指定された場合、それは実際に列の先頭に
(:from-end
の場合は末尾に)加えられる。:key
関数は初期値に
は適用されない。
列が、初期値を含めて正確に1つの要素を持つ場合、その要素は決して functionを呼び出すことなしに戻される。列が空の(そして 初期値がない)場合、functionは戻り値を得るために、引数なしで呼び 出される。
これらのマッピング演算はすべて、loop
マクロで便利に
表現することができる。コンパイルされたコードでは、関数呼び出しのない
インラインコードとしてループを生成するので、loop
の方が
速いだろう。