过滤元组列表

Zip*_*ppy 9 syntax haskell list

Haskell的新手,有一个绊脚石.我正在尝试根据第一项筛选元组列表.

filter (==(x,_)) lis
Run Code Online (Sandbox Code Playgroud)

我收到了非法的"_"错误,但我不确定如何绕过它?

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-在技术上,点组成两个功能结合在一起.


sth*_*sth 5

你不能用通配符给一个参数_在它的==运营商(或任何其他功能).论证需要是一个真正的价值,而不是一个应该匹配的模式.

如果你想使用模式匹配,你可以在filter条件时使用lambda函数:

filter (\(a,_) -> a == x) lis
Run Code Online (Sandbox Code Playgroud)

此外,还有预定义的函数fst来提取双元素元组的第一个元素.这可以与==进行相同的测试相结合:

filter ((== x) . fst)) lis
Run Code Online (Sandbox Code Playgroud)