my @list = qw/ 7 5 2 2 /;
my $prod = shift @list;
$prod *= $_ foreach @list;
####
# bad. Alters @_
sub head { shift }
# good. Preserves @_
sub head { $_[0] }
##
##
i = j + 1
j = 6
##
##
prodList lst =
if (length lst)==1 then head lst
else head lst*(prodList (tail lst))
##
##
sub head { $_[0] }
sub tail { @_[1..$#_] }
sub prod_list {
1 == @_
? head @_
: (head @_) * prod_list( tail @_ )
}
##
##
sub factorial { prod_list( 1 .. $_[0] ) }
##
##
#!/usr/bin/perl -w
use strict;
sub head { $_[0] }
sub tail { @_[1..$#_] }
sub prod_list {
1 == @_
? head @_
: (head @_) * prod_list( tail @_ )
}
sub factorial { prod_list 1 .. $_[0] }
print factorial shift;
##
##
sub factorial {
my $result = 1;
$result *= $_ for 1 .. $_[0];
$result
}
##
##
@new_list =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, expensive_func( $_ ) ] }
@old_list;
##
##
# who says Perl has too much punctuation? :)
sub prod_list { 1 == @_ ? $_[0] : $_[0] * prod_list( @_[1..$#_] ) }