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

Ume*_*ghe 4 haskell tuples list pattern-matching

我有这样的功能:

selectValue1 :: Int -> [(Int,Int)] -> [Int]
selectValue1 a [(x,y)]= [ y |(x,y)<-[(x,y)],x<-(x,y),x==a ]
Run Code Online (Sandbox Code Playgroud)

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

Type error in generator
*** Term           : (x,y)
*** Type           : (Int,Int)
*** Does not match : [a]
Run Code Online (Sandbox Code Playgroud)

为什么会这样???上面的任务怎么办?有解决方案?? 谢谢你们..:)

scl*_*clv 9

selectValue1 a xs = [ y | (x,y) <- xs, x == a ]
Run Code Online (Sandbox Code Playgroud)

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