Всем привет.

Сегодня понедельник, время Perl-поста. Скажу еще более пафосно: сегодня последний понедельник для Perl 6 в этой ленте. Да, заканчивается месячник Perl 6, думаю, он изрядно тут уже всем поднадоел :-)

Так или иначе, осталось рассмотреть совсем немного. И на очереди — «Метаоператоры».

Предназначение мета-операторов — сделать процесс вычислений массивов таким же простым, как и скаляров. По сути, семантика осталась такой же, как и при работе со скалярами. Просто привычные операторы мы заключаем в квадратные скобки: [].

# Суммирует все значения массива в отдельной переменной
my $sum = [+] @values;
# Вычисление факториала (1 * 2 * 3 * ... * 10)
my $fact = [*] 1..10;
# Проверяет упорядочен ли массив
if [<=] @values { ... }

Гипер-операторы
Получает оператор и производит вычисления с каждым элементом массива, создавая новый массив:

my @a = 1,2,3;
my @b = 4,5,6;
my @c = @a >>+<< @b; # 5 7 9
my @d = @a >>*<< @b; # 4 10 18

Можно изменить последний элемент, если надо:

my @e = @a >>+>> 1; # 1 2 4

Операторы пересечения
Позволяет создавать всевозможные объединения двух и более списков:

my @a = 1,2;
my @b = 'a', 'b';
say (@a X @b).perl; # ["1", "a", "1", "b",
# "2", "a", "2", "b"]

Можно также объединить каждый элемент списка с соответствующим элементом другого:

say (@a X~ @b).perl; # ["1a", "1b",
# "2a", "2b"]

Оператор Z создает один массив из двух с перемешанными между собой элементами (Zipper):

say (@a Z @b).perl; # 1a2b

shootnix
shootnix
24 августа 2009, 00:52
 6  
просмотров
538
5
 
chiaroscuro
24 августа 2009, 10:02
0
Вот это да. Теоркат во все поля.

Все эти "мегаоператоры" являются просто-напросто проявлениями более абстрактных весчей.

> my $sum = [+] @values;
> my $fact = [*] 1..10;

Делается с помощью свертки (fold).

> my @c = @a >>+ my @d = @a >>* say (@a X~ @b).perl; # ["1a", "1b", "2a", "2b"]

Декартово произведение множеств и применение какой-то функции.

Остается вопрос, зачем встраивать это все в язык? :)
shootnix
24 августа 2009, 12:20
0
Ну а что, оно жрать, что ли просит? Пусть будет.
chiaroscuro
24 августа 2009, 12:47
0
> Ну а что, оно жрать, что ли просит? Пусть будет.

Это затрудняет реализацию, тестирование и сопровождение Перла (именно самого Перла). Недаром его уже шестой раз переписывают. :)

Ну и другие недостатки есть.
shootnix
24 августа 2009, 13:00
0
У перла своя концепция, которая, зачастую не похожа на то, что делают те же Java и тп. Особый подход, что уж тут поделать? Ларри называет его последним постмодернистким языком программирования.
К этому еще прибавьте полушутливое выражение того же Ларри, что язык не считается полным, если в нем не используются все символы, которые можно набрать с клавиатуры :-)
chiaroscuro
24 августа 2009, 10:04
0
Забыл.

> my @c = @a >>+ my @d = @a >>*
chiaroscuro
24 августа 2009, 10:05
0
Упс. Оказывается, YV не очень хорошо относейца к этим вашим "меньше-больше". :)
Чтобы оставлять комментарии, Вы должны быть авторизованы. Если у Вас нет логина, то пройдите регистрацию.
участники
shootnix
Rex
edmond-mouse
mikusya
Legend_FoX
PeterWilson
askhattk
barmaglot
wwax
tima888
t-sh
Sigurt
zloyrusskiy
goodev
10275
PILIGRIM
войти
зарегистрироваться
сообщества
последние записи
записи по обсуждениям
записи по рейтингу
создать новое сообщество
личные блоги
последние записи
записи по обсуждениям
люди
самые активные
новые
по городам
по интересам
блог проекта
правила участия
помощь
мы на других сайтах
реклама
конкурсы
контакты
WebEverywhere, 2008-2010

Lyakhov.KZ - Большая энциклопедия Казнета Lyakhov.KZ - Большая энциклопедия Казнета