Next: Type Keywords, Previous: Composite Types, Up: Customization Types [Contents][Index]
:inline機能により、可変個の要素を、カスタマイズ型のlistやvectorの途中にスプライス(splice:
継ぎ足す)することができます。listやvector記述を含む型にたいして:inline
tを追加することによりこれを使用します。
通常listやvector型の仕様は、単一の要素型を表します。しかしエントリーが:inline
tを含む場合、マッチする値は、その含まれたシーケンスに直接マージされます。たとえば、エントリーが3要素のリストにマッチする場合、全体が3要素のシーケンスになります。これはバッククォート構文(Backquoteを参照)の‘,@’に類似しています。
たとえば、最初の要素がbazで、残りの引数は0個以上のfooかbarでなければならないリストを指定する場合は、以下のカスタマイズ型を使用します:
(list (const baz) (set :inline t (const foo) (const bar)))
これは (baz)、(baz foo)、(baz bar)、(baz foo
bar)のような値にマッチします。
要素の型がchoiceの場合は、choice自身の中で:inlineを使用せずに、choiceの候補(の一部)の中で使用します。たとえば、最初がファイル名で開始され、その後にシンボルtか2つの文字列を続けなければならないリストにマッチさせるには、以下のカスタマイズ型を使用します:
(list file
(choice (const t)
(list :inline t string string)))
選択においてユーザーが選択肢の1つ目を選んだ場合、リスト全体が2つの要素をもち、2つ目の要素はtになります。ユーザーが2つ目の候補を選んだ場合、リスト全体が3つの要素をもち、2つ目と3つ目の要素は文字列でなければなりません。