2 つのリストが与えられると、これら 2 つのリストのデカルト積であるすべての順列のリストを作成できます。
permute :: [a] -> [a] -> [[a]]
permute xs ys = [ [x, y] | x <- xs, y <- ys ]
Example> permute [1,2] [3,4] == [ [1,3], [1,4], [2,3], [2,4] ]
permute を拡張して、2 つのリストを取得する代わりに、リスト (長さ n) のリストを取得し、リスト (長さ n) のリストを返すようにするにはどうすればよいですか?
permute :: [[a]] -> [[a]]
Example> permute [ [1,2], [3,4], [5,6] ]
== [ [1,3,5], [1,3,6], [1,4,5], [1,4,6] ] --etc
Hoogle で関連するものを見つけることができませんでした.署名に一致する唯一の関数はtranspose
、目的の出力を生成しない でした。
編集:これの2リストバージョンは本質的にデカルト積だと思いますが、 n-aryデカルト積の実装に頭を悩ませることはできません。ポインタはありますか?