2016-11-09 24 views
0

私はhaskellでコーディングしていますが、mutipleリスト内の特定の要素を見つける方法を知りたいと思っています。ここで各リストの特定の要素を印刷するには

例は言わせて:

x = [(1,2,3,4,5), 
     (3,4,5,6,6), 
     (5,6,2,1,1), 
     (1,2,5,6,2)]; 

レッツは、私は、各リストの3番目の要素を見つけたいと言います。

したがって、プログラムは4,6,1,6を出力します。

私は知っている!しかし、私はxのような何かをするとき! 3の場合、3行目(1,2,5,6,2)を出力します。

各リストの3番目の要素が表示されるようにします。

+1

あなたはリストのリストを持っているわけではありませんか?今、あなたはタプルのリストを持っています。それ以外に、与えられたタプルとインデックスから要素を抽出するための一般的な方法はありません。あなたができることは 'map(\(_、_、_、e、_) - > e)x'です。 – Alec

+0

だから 'x !! 3 'は 'x'の各要素の3番目のインデックスではなく、' x'の3番目のインデックスを取得します。リストの各要素にどのように関数を適用しますか? – bheklilr

+0

@Alec theresは各リストのようになり、特定の要素を得ることはできません。 –

答えて

7

あなたが提供したのは実際にはリストのリストではなく、タプルのリストです。タプルは要素の数と型に基づいて特別な型を持っていますので、上記の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] 
関連する問題