Почему последовательность 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
Что здесь происходит?
Ответы
Ответ 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
)