列関数の多くはキーワード引数をとる; see 引数リスト. すべての キーワード引数は付加的であり、指定される場合は任意の順序に現れてよい。
:key
引数は、nil
あるいは1引数の関数を
渡されなければならない。このキー関数は、それを通して列の要素が
見えるようなフィルタとして使われる; たとえば、
(find x y :key 'car)
は(assoc* x y)
と似ている: x
自身に等しい要素ではなく、そのcar
がx
に等しいリストの
要素を検索する。:key
が省略されるかnil
の場合、フィルタは
実際には恒等関数である。
:test
と:test-not
引数は、nil
あるいは2引数の
関数でなければならない。テスト関数は、2つの列要素を比較するために、
あるいは検索値と列要素を比較するために使われる(2つの値は、それから
派生したオリジナルの列関数の引数と同じ順序で、両方が同じ列からくる
場合は列に現れるのと同じ順序で、テスト関数に渡される)。:test
引数は、マッチを示すために真(非nil
)を戻す関数を
指定しなければならない; そのかわりに、マッチを示すために偽を
戻す関数を与えるために:test-not
を使ってもよい。既定のテスト
関数は:test 'eql
である。
itemと:test
または:test-not
をとる関数の多くには、
変種-if
や-if-not
もある。そこでは、predicate関数が
itemの代わりに渡され、その述語が真(あるいは-if-not
の
場合は偽)を戻す場合、列の要素はマッチする。たとえば:
(remove* 0 seq :test '=) ≡ (remove-if 'zerop seq)
は、列seq
からすべての0を取り除く。
いくつかの演算は、引数列の部分列に働くことができる; これらの関数は、
既定がそれぞれ0と列の長さである:start
と:end
引数をとる。
start(含む)とend(含まない)の間の要素だけが、その演算に
影響される。end引数は、列の長さを表わすためにnil
を
渡されてもよい; さもなければ、startとendはともに整数で、
0 <= start <= end <= (length seq)
でなければならない。関数が2つの列引数をとる場合、制限は、第1の列は
キーワード:start1
と:end1
で、第2の列はキーワード
:start2
と:end2
で定義される。
いくつかの関数は、:from-end
引数と:count
引数を
受け入れる。:from-end
が非nil
の場合、演算が左から
右へではなく右から左へ列を通っていくことを引き起こし、:count
は、取り除かれるか処理されるかする要素の最大数の整数を指定する。
列関数は、:test
や:test-not
、:key
関数がさまざまな
要素上で呼び出される順序を保証しない。したがって、これらの関数の
副作用に依存するのは悪い考えである。たとえば、:from-end
は列が
実際に逆順で走査されることを引き起こすかもしれないし、正順で走査して、
しかし後ろから走査されたように結果を計算してもよい(mapcar*
や
every
のようないくつかの関数は、副作用がこれらの場合は完全に
受け入れられるように、関数が呼び出される順序を正確に指定する)。
GNU Emacs 19の文字列は、文字データと同様に“テキスト属性”を
含んでもよい。注がある場合を除いて、列関数によってテキスト属性が
保存されるかどうかは未定義である。たとえば
(remove* ?A str)
は、strからコピーされて結果として
生じた文字の属性を保存するかもしれないし、保存しないかもしれない。