2010-10-18 53 views
4

我有這樣的功能:如何採取從哈斯克爾元組列表中的特定值?

selectValue1 :: Int -> [(Int,Int)] -> [Int] 
selectValue1 a [(x,y)]= [ y |(x,y)<-[(x,y)],x<-(x,y),x==a ] 

我想要做的是一個元組列表傳遞給函數,並採取在元組中的第二個項目,如果在元組中的第一個項目,輸入匹配。但是這個功能給我一個錯誤:

Type error in generator 
*** Term   : (x,y) 
*** Type   : (Int,Int) 
*** Does not match : [a] 

爲什麼會發生這種情況??上面的任務怎麼做?任何解決方案謝謝大家.. :)

+0

BTW,最簡單的方法是可能'selectValue = fromJust。 lookup'。 – fuz 2010-10-19 07:22:23

+1

@ FUZxxl exept,它似乎是他希望得到比賽的整個列表,其他然後,我完全同意。另一個選項是:'selectValue a = map snd $ filter(((== a)。fst)' – HaskellElephant 2010-10-19 10:38:43

回答

9
selectValue1 a xs = [ y | (x,y) <- xs, x == a ] 

首先你不應該在定義的左邊有模式匹配。你只是給名字你的說法 - 看裏面,可以這麼說,可以在列表理解一切發生。其次,x() - (x,y)沒有意義。列表理解中的箭頭總是一個列表。在這種情況下,它什麼都不做,所以我把它刪除了。