rakudo-2010.08
Версия реализации Perl 6 языка программирования PerlВерсия компилятора rakudo для языка Perl 6.
Примеры:
Hello, World! - Perl (177):
print "Hello, World!\n";
Hello, World! - Perl (178):
Команда say
доступна только в Perl 6.
say 'Hello, World!';
Факториал - Perl (182):
Используется метаоператор сокращения; [*]
в начале списка означает “применить эту операцию к элементам списка”. Вывод результата можно также записать как
say "$i! = &fact($i)";
sub fact($n) { [*] 1..$n }
for 0..16 -> $i {
say "$i! = ", fact($i);
}
Квадратное уравнение - Perl (209):
Основных отличий от примера для Perl 5 два: команды чтения с консоли и вывода на печать и то, что все переменные должны быть объявлены при помощи зарезервированного слова my
(объявление типа переменной остается опциональным).
my $A = $*IN.get;
if ($A == 0) {
say "Not a quadratic equation.";
}
else {
my $B = $*IN.get;
my $C = $*IN.get;
my $D = $B * $B - 4 * $A * $C;
if ($D == 0) {
say "x = ", -0.5 * $B / $A;
}
else {
if ($D > 0) {
say "x1 = ", 0.5*(-$B + sqrt($D))/$A, "\nx2 = ", 0.5*(-$B - sqrt($D))/$A
}
else {
say "x1 = (", -0.5*$B/$A, ",", 0.5*sqrt(-$D)/$A, ")\nx2 = (", -0.5*$B/$A, ",", -0.5*sqrt(-$D)/$A, ")\n"
}
}
}
Числа Фибоначчи - Perl (348):
Используется рекурсивное определение чисел Фибоначчи. ~
— оператор конкатенации. $_
— переменная по умолчанию, в данном случае счетчик цикла.
sub fibonacci($n) {
$n > 1 or return $n;
return fibonacci($n-1) + fibonacci($n-2);
}
my $st = "";
for 1..16 {
$st ~= fibonacci($_) ~ ", ";
}
say $st, "..."
CamelCase - Perl (349):
Первая строка читает строку для обработки. Вторая — объявляет строковую переменную, в которой будет формироваться результат.
В третьей строке происходит самое интересное: регулярное выражение <[a..zA..Z]>+
ищет в строке все “слова” — максимальные последовательности букв. Для каждого найденного слова выполняется встроенный в регулярное выражение код { $cc ~= $0.capitalize; }
, который переводит его в нужный регистр и дописывает в результат. Наконец, результат $cc
выводится на печать.
my $A = $*IN.get;
my $cc = "";
$A ~~ s:g /(<[a..zA..Z]>+) { $cc ~= $0.capitalize; } //;
print $cc;
Комментарии
]]>blog comments powered by Disqus
]]>