あなたが提供したのは実際にはリストのリストではなく、タプルのリストです。タプルは要素の数と型に基づいて特別な型を持っていますので、上記のx
の型は[(Int,Int,Int,Int,Int)]
です。
!!
演算子(例:[1,2,3] !! 1 = 2
)をインデックスとして値を抽出できるリストとは異なり、タプルから特定の値を抽出するには、タプル全体をパターン一致させる必要があります。私たちの戻り値でそれを抽出して使用します。リストの上にマッピングするときに我々は唯一それを使用しようとしている場合、ので
f (a,b,c,d,e) = d
か、無名関数(のように:5つの値を保持するタプルから4番目の値を抽出するには、我々はこのような関数を書くことができ、それは)それに名前を割り当てること気にしないようにうれしいです:
(\(a,b,c,d,e) -> d)
我々は唯一の4番目の値を気にしているので、我々は他のすべてを破棄するかを選択できます(第三言ったが、インデックス3意味 - 以上>第四項)? :
(\(_,_,_,x,_) -> x)
これで、そのようなタプルのリストが得られました。それをそれぞれに適用したいと考えています。
f = map (\(_,_,_,x,_) -> x)
使用例:ETA-減少と、
f xs = map (\(_,_,_,x,_) -> x) xs
または:私たちは、それぞれに関数を適用し、各タプルから3番目の値のリストを返します。これは、map
でこれを行うことができます。
gchi>> f [(1,2,3,4,5),(3,4,5,6,6),(5,6,2,1,1),(1,2,5,6,2)]
[4,6,1,6]
あなたはリストのリストを持っているわけではありませんか?今、あなたはタプルのリストを持っています。それ以外に、与えられたタプルとインデックスから要素を抽出するための一般的な方法はありません。あなたができることは 'map(\(_、_、_、e、_) - > e)x'です。 – Alec
だから 'x !! 3 'は 'x'の各要素の3番目のインデックスではなく、' x'の3番目のインデックスを取得します。リストの各要素にどのように関数を適用しますか? – bheklilr
@Alec theresは各リストのようになり、特定の要素を得ることはできません。 –