次: , 前: Composite Types, 上: Customization Types


13.4.3 リストに繋ぎ合わせる

:inline機能により、可変個数の要素をリストやベクトルの 途中に繋ぎ合わせることができます。 listvectorの要素型に現れる set型、choice型、repeat型の中に使います。

通常、listvectorのおのおのの要素型は、 リストやベクトルのたった1つの要素を記述します。 したがって、要素型がrepeatであると、 1要素として表示される長さを指定しないリストを指定します。

しかし、要素型に:inlineを使うと、 これに一致する値は、:inlineを含むシーケンスに直接に併合されます。 たとえば、3要素のリストに一致すると、 それがシーケンス全体の3つの要素になります。 これはバッククォート構文の`,@'の使い方に似ています。

たとえば、先頭要素がtであり、 残りがfoobarの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要素は文字列である必要があります。