15.4.3 Встраивание в списки

Функция :inline позволяет вставить произвольное количество элементов в середину типа настройки list или vector. Вы используете ее, добавляя :inline t к спецификации типа, которая содержится в спецификации list или vector.

Обычно каждая запись в спецификации типа list или vector описывает один тип элемента. Но когда запись содержит :inline t, значение, которое она соответствует, объединяется непосредственно с содержащей последовательностью. Например, если запись соответствует списку из трех элементов, то они становятся тремя элементами общей последовательности. Это аналогично оператору ,@ в конструкции обратных кавычек (см. Обратные кавычки).

Например, чтобы указать список, чей первый элемент должен быть baz, а остальные аргументы должны быть нулем или более foo и bar, используйте этот тип настройки:

(list (const baz) (set :inline t (const foo) (const bar)))

Это соответствует значениям, таким как (baz), (baz foo), (baz bar) и (baz foo bar).

Когда тип элемента является choice, вы используете :inline не в самом choice, а в (некоторых) альтернативах choice. Например, чтобы сопоставить список, который должен начинаться с имени файла, за которым следуют либо символ t, либо две строки, используйте этот тип настройки:

(list file
      (choice (const t)
              (list :inline t string string)))

Если пользователь выбирает первую альтернативу в choice, то общий список имеет два элемента, и второй элемент — это t. Если пользователь выбирает вторую альтернативу, то общий список имеет три элемента, и второй и третий должны быть строками.

Виджеты могут указывать предикаты, чтобы определить, соответствует ли встроенное значение виджету с элементом :match-inline.