Sigue el código e la función matrixProd
:
lhp@europa:~/projects/perl/src/perltesting$ sed -ne '1,26p' matrixproduct.pl | cat -n 1 #!/usr/bin/perl -w 2 use strict; 3 use List::Util qw(sum); 4 use List::MoreUtils qw(any); 5 use Scalar::Util qw{reftype}; 6 7 sub matrixProd { 8 my ($A, $B) = @_; 9 die "Error. Se esperaban dos matrices" if any { !defined($_) or reftype($_) ne 'ARRAY' } ($A, $B, @$A, @$B); 10 11 my $nrA = @$A; 12 my $nrB = @$B; 13 my $ncB = @{$B->[0]}; 14 my @C; 15 16 die ("Las matrices no son multiplicables\n") if any { @$_ != $nrB } @$A; 17 18 for(my $i = 0; $i < $nrA; $i++) { 19 for(my $j = 0; $j < $ncB; $j++) { 20 my $k = 0; 21 $C[$i][$j] = sum(map { $A->[$i][$k++] * $_ } map { $_->[$k] } @$B); 22 } 23 } 24 25 return \@C; 26 }
Casiano Rodríguez León