perl6
Посмотрел на Perl6
Очень давно хотел посмотреть во что превратился Perl6 за те годы, что я его не видел. Посвятил четыре часа своей жизни на изучение. Что я хочу сказать, богатейший язык при беднейшей документации. Синтаксис, как и положено языку Perl, позволяет сделать одно и то же миллионом различных способом, 99% из которых нечитаемы.
Я в восторге.
К сожалению, не всё описанное в документации работает (например, lvalue-метод substr класса Str у меня работать отказался),
Сегодня на «Хабре» появилась интересная статья, где описывался нормальный алгоритм Маркова для деления двух целых чисел с точностью 4 знака после запятой в унарной системе счисления. То есть: |/|||| = 0.25, ||/||| = 0.6666 и так далее.
Замены в статье уже описаны, осталось реализовать алгоритм (в заменах я поменял пустую строку на два апострофа: ’’). Привожу с сокращением списка замен:
use v6;
my $входная = '||/|||';
my @замены = <%* *% %| %* *| ** |* t t* *t …тут просто замены через пробел… p^ '' p .FIN _ .FIN>;
loop {
my $нашёл = Bool::False;
my $начтонадо;
for @замены -> $что, $начто {
my $где = $входная.index($что);
if defined $где {
$нашёл = Bool::True;
given $начто {
when <''> {
$начтонадо = ''
}
when /FIN/ {
($начтонадо = $начто) ~~ s[FIN] = '';
$нашёл = Bool::False;
}
default {
$начтонадо = $начто
}
}
#`{
К сожалению, lvalue метод не сработал:
$входная.substr($где, $что.chars) = $начтонадо;
выдаёт «cannot modify readonly value
}
$входная = $входная.substr(0, $где) ~ $начтонадо ~ $входная.substr($где + $что.chars);
say $входная;
last;
}
}
last unless $нашёл;
}
END {
$входная.say;
}К сожалению, не удалось использовать итераторы, они недостаточно хорошо описаны,
Меня очень радует нативная поддержка Unicode, которая реализована куда глубже, чем в Python, к примеру, конструкция языка >> может быть заменена на », в качестве ограничителей (например, многострочного комментария) можно использовать символы 「 и 」, а say "Ⅰ".succ правильно выдаёт Ⅱ).
Наворотили в языке много. Отдельной строкой — регулярные выражения. Синтаксис совсем другой, мне кажется более продуманным, чем тот, что сейчас в Perl5 (и тем более в PCRE), возможностей стало больше, а выражения выглядят аккуратнее.