我有这样的功能:
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]
为什么会这样???上面的任务怎么做?有解决方案??谢谢大家...... :)
答案 0 :(得分:9)
selectValue1 a xs = [ y | (x,y) <- xs, x == a ]
首先,您不应该在定义的左侧匹配模式。你只是给你的论点命名 - 在里面看,可以说,所有这些都可以在列表理解中发生。其次,x < - (x,y)没有意义。列表理解中箭头的rhs始终是列表。在这种情况下,它什么也没做,所以我删除了它。