如何从haskell中的元组列表中获取特定值?

时间:2010-10-18 18:15:58

标签: list haskell pattern-matching tuples

我有这样的功能:

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

我想要做的是将元组列表传递给函数,如果元组中的第一项与输入a匹配,则取元组中的第二项。但是这个函数给我一个错误:

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

为什么会这样???上面的任务怎么做?有解决方案??谢谢大家...... :)

1 个答案:

答案 0 :(得分:9)

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

首先,您不应该在定义的左侧匹配模式。你只是给你的论点命名 - 在里面看,可以说,所有这些都可以在列表理解中发生。其次,x < - (x,y)没有意义。列表理解中箭头的rhs始终是列表。在这种情况下,它什么也没做,所以我删除了它。