2008/09/30

perlで直積 cross product with perl このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

ほかのモジュールを使わずに直積を書いてみました。



sub cross_product
{
my $r = [[]];
$r = [ map{ my $t=$_; map{ [$t, @$_] } @$r } @$_ ]
for reverse @_;
$r;
}

$result = cross_product(["+", "-"], ["A".."C"], [0..2]);

print join "\n", map { join "", @$_ } @$result;





実行結果



+A0
+A1
+A2
+B0
+B1
+B2
+C0
+C1
+C2
-A0
-A1
-A2
-B0
-B1
-B2
-C0
-C1
-C2




pythonなら



[ x+y+str(z) for x in ["+","-"]
for y in ["A", "B", "C"]
for z in range(0,2)]



内包表記、便利ですね。



参考