perl6.suОсвоим perl6 к 2015 году!

массивы


       @list.method - применяет метод ко всему массиву, а не к каждому его элементу.
       @list».method - применяет метод не ко всему массиву, а к каждому его элементу, возвращая массив полученных результатов.
    
#!/usr/bin/perl6
my @list=1..5;
@list.sin.say;
'--------'.say;
@list».sin.say;
-0.958924274663138
--------
0.841470984807897 0.909297426825682 0.141120008059867 -0.756802495307928 -0.958924274663138

       Bene. Однако так и хочется подправить скрипт, чтобы он выводил значения синусов столбиком. Нет ничего проще.
    
#!/usr/bin/perl6
my @list=1..5;
@list.sin.say;
'--------'.say;
@list».sin».say;
-0.958924274663138
--------
-0.958924274663138
0.141120008059867
0.841470984807897
-0.756802495307928
0.909297426825682

       Symbolum » fructuosum est.
       И полезное наблюдение - @list.sin.say выводит синус последнего элемента массива.
# mutatio postrema: 8 Sep 2010


       » или >> очень хорош в плане разгрузки программы от циклов. Допустим, у нас есть массив, с каждым элементом которого надо проделать какие-то сложные вещи.
    
#!/usr/bin/perl6
my @list=<abc def ghi>;
@list».&double.say;
sub double($in) { # в субрутину заключаем "сложную вещь"
	return "$in $in ";
	}
abc abc  def def  ghi ghi 

       Теперь основная часть программы избавится от множества for {}
       Наша программа продублировала слова. say успешно вывела массив. И опять нас не устраивает, что всё в одну строку. Чуть подправим...
    
#!/usr/bin/perl6
my @list=<abc def ghi>;
@list».&double».say;
sub double($in) { # в субрутину заключаем "сложную вещь"
	return "$in $in ";
	}
ghi ghi 
abc abc 
def def 

       То есть после названия субрутины тоже можно ставить волшебный »
       Не знаю почему, но надо писать именно '&double' при вызове, а не 'double' (что приводит к ошибке "метод не найден").
# mutatio postrema: 8 Sep 2010


       Если надо, выбрать из массива какую-то его часть по номерам элементов, то можно так:
    
#!/usr/bin/perl6
my @list='a' .. 'z';
my @list2=@list[5,6,8,11];
@list2».say;
l
g
i
f

       Bene.
# mutatio postrema: 8 Sep 2010


       Если использовать массив или список как число, тогда в качестве оного берется количество элементов.
    
#!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass == 4;
say @mass + 10;
say <pedis pulex acarus cimex> == 4;
say <pedis pulex acarus cimex> + 10;
True
14
True
14

       Очевидно, что надо опасаться риска, что случайно можно обратиться с другим контекстом.
    
#!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass eq 4;
False

       Для явного вызова количества элементов массива есть оператор elems.
    
#!/usr/bin/perl6
my @mass=<pedis pulex acarus cimex>;
say @mass.elems;
say <pedis pulex acarus cimex>.elems;
4
4

       N.B. Пожалуй, лучше не рисковать и использовать elems.
# mutatio postrema: 8 Sep 2010

   >>, массивы, elems, sub      charta situs       nota L, nota LII, nota LVI, nota LVIII   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011