]]> ]]>

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

]]>

Работа программистам