:inline
機能により、可変個数の要素をリストやベクトルの
途中に繋ぎ合わせることができます。
list
やvector
の要素型に現れる
set
型、choice
型、repeat
型の中に使います。
通常、list
やvector
のおのおのの要素型は、
リストやベクトルのたった1つの要素を記述します。
したがって、要素型がrepeat
であると、
1要素として表示される長さを指定しないリストを指定します。
しかし、要素型に:inline
を使うと、
これに一致する値は、:inline
を含むシーケンスに直接に併合されます。
たとえば、3要素のリストに一致すると、
それがシーケンス全体の3つの要素になります。
これはバッククォート構文の‘,@’の使い方に似ています。
たとえば、先頭要素がt
であり、
残りがfoo
かbar
の0個以上の繰り返しであるリストを指定するには、
つぎのカスタマイズ型を使います。
(list (const t) (set :inline t foo bar))
これは、(t)
、(t foo)
、(t bar)
、(t foo bar)
などの
値に一致します。
要素型がchoice
であるときには、
choice
そのものには:inline
を使いませんが、
choice
の選択肢(のどれか)に:inline
を使います。
たとえば、ファイル名で始まりシンボルt
か2つの文字列が続くような
リストに一致するようにするには、
つぎのカスタマイズ型を使います。
(list file (choice (const t) (list :inline t string string)))
ユーザーが最初の選択肢を選ぶと、全体としてのリストは2要素になり、
第2要素はt
です。
ユーザーが2番目の選択肢を選ぶと、
全体としてのリストは3要素になり、
第2要素と第3要素は文字列である必要があります。