Работая над своим ответом на этот вопрос , мне пришло в голову, что это сложно соответствуют конечному диапазону элементов. С помощью встроенных шаблонов вы можете сопоставить 1 элемент ( _
), 1 или несколько элементов ( __
) или ноль или более элементов ( ___
). Чтобы сопоставить более одного элемента, я использовал PatternSequence
, например этот
a:PatternSequence[_,_,_]
или, в более общем смысле,
a:PatternSequence@@Array[_&,3].
(Использование Condition
также могло бы работать .) Чтобы сопоставить диапазон от n до m элементов, мы могли бы сделать
a:Alternatives@@( PatternSequence @@@ Array[_&, {n,m}] ),
, но это довольно запутанный способ выполнить то, что можно сделать с помощью
a__ /; n <= Length[{a}] <= m.
. Однако это поднимает интересный вопрос, используя Condition
, легко сопоставить диапазон от 0 до n,
a___ /; Length[{a}] <= n,
, но можно ли это сделать с использованием только шаблонов, то есть без использования Условие
( /;
)? , как бы подобрать соответствие 0 элементов без добавления условия? Кроме того, что быстрее?