Иногда в праздничном веселье, как нечто далекое, мелькают мысли: кто я, что я делал, perl какой-то...
Создание списка
sub list($;$) {
my ($h, $t) = @_;
return sub {
return $h, $t;
}
}
my $x1 = list(1);
my $x2 = list(2, $x1);
my $x3 = list(3, $x2);
Печать списка
sub print_list($);
sub print_list($) {
my ($list) = @_;
my ($h, $t) = $list->();
print_list($t) if $t;
print "$h ";
}
print_list $x3;
print "\n";
map
sub _Map {
my ($sub, $list) = @_;
my ($h, $t) = $list->();
my $r = $t ? _Map($sub, $t) : undef;
list($sub->($h), $r);
}
sub Map(&;$) { &_Map }
print_list Map { $_[0]**$_[0] } $x3;
print "\n";
2 комментария:
Если бы в perl не было списков, Вы бы не смогли использовать глобальный список - @_ ;)
Вместо @_ можно использовать серию из shift'ов. Я обычно именно их и использую - бывает полезно назначить некоторым аргументам значения по умолчанию или дописать комментарий к аргументу. А когда не нужно - всё равно использую shift - для единообразия, да и читать приятнее столбиком, чем строчкой.
Что-то типа:
sub inc($;$)
{
my $num = shift; # Число для приращения
my $inc = shift || 0; # Инкремент, по умолчанию 0
return $num + $inc;
}
Отправить комментарий