use Algorithm::Loops qw( NestedLoops );
use List::Util qw( reduce sum );
sub mul { return reduce { $a * $b } @_; }
NestedLoops(
[
map { [ 0..$n_ra->[$_] ] }
0..$#$n_ra
],
sub {
$prob_ra[sum @_] += mul
map { $f_raa->[$_]->[$_[$_]] }
0..$#_;
}
);
I suspect that
$n_ra->[X]
is equal to
$#{$f_raa->[X]}
in which case
map { [ 0..$n_ra->[$_] ] } 0..$#$n_ra
can be replaced with
map { [ 0..$#$_ ] } @$f_raa
|