3

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()何らかの理由で、リストではなく参照が戻ってきています。

提案やその他のよりエレガントなデカルト積ソリューションをいただければ幸いです。

4

1 に答える 1