Почему последовательность Perl 6 'A'... 'AA' имеет только один элемент? - программирование
Подтвердить что ты не робот

Почему последовательность Perl 6 'A'... 'AA' имеет только один элемент?

Сегодня я заметил, что последовательность 'A'... 'AA' содержит только один элемент:

> 'A' ... 'AA'
(A)

Я думал, что это будет содержать 27: алфавит плюс последний AA.

Если я явно предоставляю генератор, он делает:

> 'A', *.succ ... 'AA'
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA)

В документах говорится, что генератором по умолчанию является *.succ или *.pred зависимости от того, как сравниваются конечные точки. Но:

> 'A' cmp 'AA'
Less

Похоже, я должен получить генератор *.succ по умолчанию. Я определенно не получаю генератор *.pred:

> 'A', *.pred ... 'AA'
Decrement out of range
  in whatevercode  at <unknown file> line 1

Что здесь происходит?

4b9b3361

Ответ 1

посмотрите, какой код используется: rakudo/operator

ваш код очень похож на

"A", *.succ ...^ * gt "AA"

("B" gt "AA" - это True)

и код Курта Тильмеса похож на

"A", *.succ ...^ {$_ gt "ZZ" or .chars > "ZZ".chars}
"A", *.succ ...^ {$_ gt "YY" or .chars > "YY".chars}

("Z" gt "YY" и "AAA".chars > "ZZ".chars - это True)