map и grep
Массивы в Perl 6 (будучи объектами класса Array) имеют предопределенные методы map и grep, с помощью которых можно поэлементно обрабатывать массив, формируя новый.
В следующих примерах предполагается, что массив @a содержит целые числа от 1 до 10:
my @a = (1..10);
Метод map последовательно вызывается для каждого элемента массива, выполняет на них определенные действия и формирует новый массив, который и возвращается функцией.
my @b = @a.map:{$_ * 2};
say "@b[]";
Внутри блока кода .map:{} значение очередного элемента принимает переменная $_. Эта переменная — только для чтения. Полученное в блоке значение присваивается соответствующему элементу нового массива. В показанном примере получится строка из элементов с удвоенными значениями:
2 4 6 8 10 12 14 16 18 20Метод grep отсеивает элементы, ориентируясь на условие, заданное в его блоке кода:
my @c = @a.grep:{$_ % 2};
say "@c[]";
Условие $_ % 2 отбирает элементы, значение которых является четным числом. Элементы, для которых условие выполняется, попадают в выходной массив. Программа напечатает строку
1 3 5 7 9
Более сложный пример, отбирающий элементы со значением 4, 5 и 8, и содержащий обращение к дополнительной функции:
my @d = @a.grep:{$_ == any(condition())}.join(', ').say;
sub condition()
{
return (4, 5, 8);
}map, grep — 6 мая 2007