Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 元组过滤列表_List_Haskell_Syntax - Fatal编程技术网

List 元组过滤列表

List 元组过滤列表,list,haskell,syntax,List,Haskell,Syntax,对哈斯克尔来说是个新手,遇到了一个绊脚石。我正在尝试根据第一项筛选元组列表 filter (==(x,_)) lis 我遇到了一个非法的“\u1”错误,但我不确定如何避免它?在Haskell中,不能像遍历列表一样遍历元组 如果元组只有两项,则可以使用fst检索元组的第一项,使用snd检索第二项 我认为您想要做的一个方法是: Prelude> let lst = [(1,2), (3,4)] Prelude> filter ((==1).fst) lst [(1,2)] 它只返回列

对哈斯克尔来说是个新手,遇到了一个绊脚石。我正在尝试根据第一项筛选元组列表

filter (==(x,_)) lis

我遇到了一个非法的“\u1”错误,但我不确定如何避免它?

在Haskell中,不能像遍历列表一样遍历元组

如果元组只有两项,则可以使用
fst
检索元组的第一项,使用
snd
检索第二项

我认为您想要做的一个方法是:

Prelude> let lst = [(1,2), (3,4)]
Prelude> filter ((==1).fst) lst
[(1,2)]
它只返回列表中第一个元素等于1的项目;当然,您可以在我放置1的地方替换
x


更具体地说,
(==1)。fst
首先将
fst
应用于lst中的元素,然后将
(==1)
应用于
fst
的结果——从技术上讲,点将两个函数组合在一起。

不能将带有通配符的参数
应用于
=/code>运算符(或任何其他函数)。参数必须是实值,而不是应该匹配的模式

如果您想使用模式匹配,可以使用lambda函数作为
过滤器
条件:

filter (\(a,_) -> a == x) lis
此外,还有一个预定义的函数,用于提取两元素元组的第一个元素。这可以与
=
结合使用,以执行相同的测试:

filter ((== x) . fst)) lis

太好了,谢谢。我想知道那些在所有示例代码上都做了什么!我认为
$
的使用(以及它们之间的差异)是开始Haskell最常见的障碍之一——所以别担心,你不是唯一一个遇到问题的人!