我在haskell中編碼,並且想知道如何在多個列表中找到某個元素。如何打印每個列表中的某個元素
下面的例子讓說:
x = [(1,2,3,4,5),
(3,4,5,6,6),
(5,6,2,1,1),
(1,2,5,6,2)];
讓我們說,我想找到每個列表的第三個元素。
所以程序會打印出來4,6,1,6
我知道!!但是當我做一些像x一樣的東西! 3,它打印出第三行(1,2,5,6,2)。
我希望它打印出每個列表的第三個元素。
我在haskell中編碼,並且想知道如何在多個列表中找到某個元素。如何打印每個列表中的某個元素
下面的例子讓說:
x = [(1,2,3,4,5),
(3,4,5,6,6),
(5,6,2,1,1),
(1,2,5,6,2)];
讓我們說,我想找到每個列表的第三個元素。
所以程序會打印出來4,6,1,6
我知道!!但是當我做一些像x一樣的東西! 3,它打印出第三行(1,2,5,6,2)。
我希望它打印出每個列表的第三個元素。
你提供的實際上並不是列表的列表,而是元組列表。元組根據元素的數量和類型有特殊的類型,所以上面的x
的類型是[(Int,Int,Int,Int,Int)]
。
不像名單,這讓我們通過與!!
運營商索引中提取值(例如:[1,2,3] !! 1 = 2
),以便從一個元組,我們必須格局,整個元組匹配提取特定的值,給一些名字,我們希望值在我們的返回值中提取和使用它。爲了從持有5個值的元組的第四值,我們可以寫這樣的功能:
f (a,b,c,d,e) = d
或者,作爲一個匿名函數(因爲,如果我們只打算使用它時,映射在列表,這是很好的懶得給它分配一個名稱):
(\(a,b,c,d,e) -> d)
由於我們只關心第四值,我們可以選擇放棄所有其他人(你說的第三,但意味着指數3 - 上面>第4期) :
(\(_,_,_,x,_) -> x)
現在我們有一個這樣的元組列表,我們希望將它應用於每個元組。我們可以map
做到這一點,這將適用於功能到每個並從每個元組返回第三值的列表:
f xs = map (\(_,_,_,x,_) -> x) xs
或者,用ETA還原:
f = map (\(_,_,_,x,_) -> x)
用法示例:
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]
您確定不打算列出清單嗎?現在,你有一個元組列表。除此之外,Haskell沒有通用的方式來從給定的元組和索引中提取元素。你可以做的最好的是map(\(_,_,_,e,_) - > e)x'。 – Alec
so'x !! 3'會得到'x'的第三個索引,而不是'x'的每個元素的第三個索引?你如何將一個函數應用於列表的每個元素? – bheklilr
@Alec theres沒有辦法像通過每個列表去獲得某個元素? –