Splicing into Lists
-------------------
The `:inline' feature lets you splice a variable number of elements
into the middle of a list or vector. You use it in a `set', `choice'
or `repeat' type which appears among the element-types of a `list' or
`vector'.
Normally, each of the element-types in a `list' or `vector'
describes one and only one element of the list or vector. Thus, if an
element-type is a `repeat', that specifies a list of unspecified length
which appears as one element.
But when the element-type uses `:inline', the value it matches is
merged directly into the containing sequence. For example, if it
matches a list with three elements, those become three elements of the
overall sequence. This is analogous to using `,@' in the backquote
construct.
For example, to specify a list whose first element must be `t' and
whose remaining arguments should be zero or more of `foo' and `bar',
use this customization type:
(list (const t) (set :inline t foo bar))
This matches values such as `(t)', `(t foo)', `(t bar)' and `(t foo
bar)'.
When the element-type is a `choice', you use `:inline' not in the
`choice' itself, but in (some of) the alternatives of the `choice'.
For example, to match a list which must start with a file name,
followed either by the symbol `t' or two strings, use this
customization type:
(list file
(choice (const t)
(list :inline t string string)))
If the user chooses the first alternative in the choice, then the
overall list has two elements and the second element is `t'. If the
user chooses the second alternative, then the overall list has three
elements and the second and third must be strings.