2 つの文字列の外積 (デカルト積) を計算する関数を Perl で作成しようとしています。Python には、次のような同様のコードがあります。
def cross(A, B):
"Cross product of elements in A and elements in B."
return [a+b for a in A for b in B]
このリスト内包表記をエレガントな方法で模倣するにはどうすればよいでしょうか?
これが私がこれまでに持っているものです:
# compute the cross product of two Strings
# cross('12','AB') = ((1,A), (1,B), (2,A), (2,B))
sub cross {
# unpack strings
my ($A, $B) = @_;
# array to hold products
my @out_array;
# split strings into arrays
my @A_array = split(//, $A);
my @B_array = split(//, $B);
# glue the characters together and append to output array
for my $r (@A_array) {
for my $c (@B_array) {
push @out_array, [$r . $c];
}
}
return \@out_array;
}
split()
何らかの理由で、リストではなく参照が戻ってきています。
提案やその他のよりエレガントなデカルト積ソリューションをいただければ幸いです。