Haskell Tupleのn番目の要素を取得する必要があります。タプルは次のようになります:(3,5、 "String1"、 "String2"、 "String3"、 "String4"、 "String5"、 "String6"、 "String7"、 "String8"、 "String9"、 "String10 ")。この問題を解決するためのアイデアを教えてください。ありがとう。
知っているかもしれないし、知らないかもしれないので、fstとsndは2要素のタプルに対してのみ機能します。
fst' (a,b) = a
私が知っている限り、あなたはあなた自身を書かなければなりません
get5th (_,_,_,_,a,_,_,_,_,_) = a
ご覧のとおり、独自のタイプを定義することができます。
パターンマッチングでそれを行うことができます。 2値または3値のタプルと照合できるように、10値のタプルと照合できます。
let (_, _, _, _, _, _, _, _, _, x, _, _) = Tuple in x
ただし、そうすることはできませんwant。タプルからn番目の値を取得しようとしている場合、ほぼ間違いなく間違った型を使用しています。 Haskellでは、長さの異なるタプルは異なりますtypes-これらは基本的に互換性がありません。 Int
とString
が異なるように、(Int, Int)
と(Int, Int, Int)
も完全に異なります。
N番目の要素を取得できるデータ型が必要な場合は、[String]
などのリストが必要です。リストを使用すると、インデックス作成に!!
演算子(0から始まる)を使用できるため、次のようにできます。
myList !! 9
10番目の要素を取得します。
あなたの例を考えると、巨大なタプルではなく、(Int, Int, [String])
のような型が必要だと思います。これにより、2つの数字と任意の数の文字列を使用できます。上記の!!
演算子を使用してインデックスで文字列を取得できます。
Tupleパッケージの選択関数 を使用することもできます。
Tupleごとにこれを1回だけ行う必要があり、すべての要素を一度に必要とする場合は、単に使用できます
let (x, y, s1, s2, s3, s4, s5, s6, s7, s8) = someTuple
in ...
値を直接使用します。