1. ホーム
  2. haskell

Haskellで2つのリストのデカルト積を作る

2023-07-28 15:49:34

質問

Haskellで2つのリストのカルテジアン積を生成したいのですが、方法がわかりません。カルテジアン積は、リスト要素のすべての組み合わせを提供します。

xs = [1,2,3]
ys = [4,5,6]

cartProd :: [a] -> [b] -> [(a,b)]
cartProd xs ys ==> [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]

これは実際の宿題ではなく、そのような質問とも関係ありませんが、この問題の解決方法は、私が行き詰っている問題の助けになるかもしれません。

どのように解決するのですか?

これはリスト内包を使えばとても簡単です。リストのデカルト積を得るには xsys というタプルを作成する必要があります。 (x,y) 各要素に対して xxs で、各要素 y の中に ys .

これにより、次のようなリスト内包が得られます。

cartProd xs ys = [(x,y) | x <- xs, y <- ys]