Краткая печать математических серий в Раку - PullRequest
6 голосов
/ 09 ноября 2019

Математический ряд, возьмем, например, последовательную последовательность, представленную здесь в виде массива:

my @seq = my $a=0, {++$a} ... *;
for @seq[^10].kv {state $f=0; ($^k < 4 or $^k > 7) ?? say "a$^k =  "  ~ $^v !! (say "..." if $f ne 1; $f=1) };

Отпечатки:

a0 =  0
a1 =  1
a2 =  2
...

a8 =  8
a9 =  9

Мои вопросы: 1- Есть ли простой способ отброситьтолько первый элемент, т. е. a0 = 0 из напечатанного вывода?

2- Можно ли сделать этот код более идиоматическим?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 ноября 2019

Это может быть немного более идиоматично:

my @seq = 0, *+1 ... *;
say @seq[^4], @seq[7..10]

Вам не нужно использовать лексическую переменную внутри последовательности;Whatever или переменные-заполнители могут безопасно использоваться в последовательностях. Затем вы можете просто выбрать элементы последовательности, которую вы хотите напечатать. Который возвращает «(0 1 2 3)(7 8 9 10)␤»

5 голосов
/ 10 ноября 2019

Вы можете пропустить первые N значений на любое Iterable или Sequence с помощью skip:

for (^5).skip(3) {
    .say
}
# 3
# 4

Если вы не укажете число, оно будетпропустить только один элемент.

...