Не уверен, почему это не работает. Но всегда есть:
say reduce { $^a + $^b }, 1,3,5 # 9
Полагаю, вы знали, что но это все, что у меня есть на сегодня . :)
Я переместил свой комментарий сюда и немного расширил его, прежде чем я засну.
Ошибка TTIAR означает, что он не может проанализировать уменьшение как уменьшение. Поэтому я решил быстро взглянуть на грамматику Perl 6 .
Я искал «Reduce» и быстро пришел к выводу, что он, должно быть, не соответствует этому регулярному выражению .
Хотя это регулярное выражение может быть длиной всего около 20 строк, и я распознаю большинство конструкций, оно явно не тривиально. Я предполагаю, что есть способ использовать Grammar::Debugger
и / или какой-либо другой инструмент отладки грамматики с грамматикой Perl 6, но я этого не знаю. В то же время, вы, должно быть, уже немного удивлены, поэтому говорите мне: почему это не совпадает? :)
Обновление
С ответом Брэда на ваш вопрос в качестве нашего гида ответ на мой вопрос становится сразу очевидным. Первая строка собственно регулярного выражения (после объявления двух переменных) напрямую соответствует правилу "без пробелов", которое показал Брэд:
<?before '['\S+']'>
Это утверждение, что механизм регулярных выражений расположен непосредственно перед строкой вида [...]
, где ...
- это один или несколько непробельных символов. (\s
означает пробел, \S
означает не пробел.)
(Конечно, я был бы совершенно сбит с толку почему это не-космическое правило было там без ответа Брэда.)