powerset.pl
4 my @a = (1,2,3);
5
6 my @p = ([]);
7 for my $a(@a) {
8 @p = (@p, map {[@$_, $a]} @p);
9 }
これ以上簡単な書き方がわからなかった。
Haskellだと『すごいHaskell』にもある通りで
powerset.hs
1 import Control.Monad
2 powerset :: [a]->[[a]]
3 powerset xs = filterM (\x->[True,False]) xs
*Main> :l powerset.hs
[1 of 1] Compiling Main ( powerset.hs, interpreted )
Ok, modules loaded: Main.
*Main> powerset [1..3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]