1. ホーム
  2. haskell

[解決済み] Haskell タプルをリスト化する?

2022-02-16 21:24:03

質問

タプルのリストを変換することは可能ですか? [(Int,Int)] どのような入力サイズにも有効な汎用的な方法として? ... 私はそれが汎用的に可能ではないことを様々な質問で見ました。

の例です。

type X = [(Int,Int)]


func :: X -> [Int]

解決方法は?

あなたの質問は、タプルをどのようにリストに変換すべきかについて、あまり明確ではありません。私は、あなたがそれらを平坦化したいと仮定します - 例えば。 [(1,2),(3,4)] は次のようになります。 [1,2,3,4] .

この変換は、タプルの2つの要素が同じタイプである場合にのみ可能です。 この場合、次のようなことができます。

tupleToList :: [(a,a)] -> [a]
tupleToList ((a,b):xs) = a : b : tupleToList xs
tupleToList _          = []

一般的なケースでは、このような翻訳は不可能です。不可能を可能にするために想像できるのは Either を使用して、2つの異なるタイプをラップすることができます。

tupleToList :: [(a,b)] -> [Either a b]
tupleToList ((a,b):xs) = Left a : Right b : tupleToList xs