次: Type Keywords, 前: Composite Types, 上: Customization Types
: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要素は文字列である必要があります。