Mar*_*off 22
在Haskell中,你不能像列表那样遍历元组.
如果元组只有两个项目,您可以使用它fst来检索元组的第一项并snd检索第二项.
做我认为你想做的一种方法是这种方法:
Prelude> let lst = [(1,2), (3,4)]
Prelude> filter ((==1).fst) lst
[(1,2)]
Run Code Online (Sandbox Code Playgroud)
仅返回列表中第一个元素等于1的项; 当然,你可以替换x我放置的地方1.
要成为一个更具体一点,(==1).fst首先适用fst于善堂的元素,然后应用(==1)到的结果fst-在技术上,点组成两个功能结合在一起.
你不能用通配符给一个参数_在它的==运营商(或任何其他功能).论证需要是一个真正的价值,而不是一个应该匹配的模式.
如果你想使用模式匹配,你可以在filter条件时使用lambda函数:
filter (\(a,_) -> a == x) lis
Run Code Online (Sandbox Code Playgroud)
此外,还有预定义的函数fst来提取双元素元组的第一个元素.这可以与==进行相同的测试相结合:
filter ((== x) . fst)) lis
Run Code Online (Sandbox Code Playgroud)