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_Tuples - Fatal编程技术网

List 列表元组的一个函数

List 列表元组的一个函数,list,haskell,tuples,List,Haskell,Tuples,如果这个问题很琐碎,我很抱歉,但我一直在努力寻找答案,这就是为什么我决定把它贴在这里 我想构建一个函数,它接受一个二进制元组列表:[(整数,整数)],并从所有元组的所有第二个整数中输出最大整数。我编写了以下代码: maxSecond:: [(Integer,Integer)] -> Integer maxSecond [(ks, as)] = aux (unzip [(ks, as)]) where aux ([ks],[as]) = maximum ([as]) 但只有当我输入一个

如果这个问题很琐碎,我很抱歉,但我一直在努力寻找答案,这就是为什么我决定把它贴在这里

我想构建一个函数,它接受一个二进制元组列表:[(整数,整数)],并从所有元组的所有第二个整数中输出最大整数。我编写了以下代码:

maxSecond:: [(Integer,Integer)] -> Integer
maxSecond [(ks, as)] = aux (unzip [(ks, as)])
  where aux ([ks],[as]) = maximum ([as])
但只有当我输入一个只有1个元组的列表,并输出一个超过2个元组的列表的“函数中的非穷举模式”错误时,它才起作用。我的问题不是如何实际解决原始问题,而是为什么这种方法在Haskell中不起作用

我还编写了以下函数:

aaa:: ([Integer], [Integer]) -> Integer
aaa ([as],[ms]) = 10
显然,在Haskell中输入列表的元组是不可能的(除非列表不是由1个元素组成的)。对此有什么解释吗


谢谢

初学者Haskell程序员犯的一个常见错误是,他们认为
[x]
是一种匹配任意长度列表的模式。但是
[x]
实际上是一个与单例列表匹配的模式(一个只有一个元素的列表,并且该元素“链接”到
x

如果我们希望能够处理空列表(
[]
)或非空列表(长度大于零),我们可以只以模式
x
写入,
x
将“链接”到该列表本身。注意,我们可以使用我们想要的任何标识符。列表的模式匹配当然很有用:例如,处理空列表、cons、正好包含一个、两个、三个、五个等元素的列表的情况。但在这里,我们只会限制自己,让事情变得更复杂

为了计算元组中第二项的最大值,我们可以先进行
映射
ping,生成元素列表,每个元素都是对应元组的第二项,然后我们可以计算该列表的
最大值
,如下所示:

maxSecond :: Ord a => [(a, a)] -> a
maxSecond xs = maximum (map snd xs)
因此,我们在这里利用函数将函数应用于列表中的所有元素,该函数取2元组的第二个元素,然后计算该列表的最大值

我们也可以使用运算符,并按如下方式编写:

maxSecond :: Ord a => [(a, a)] -> a
maxSecond = maximum . map snd

提示:一个常见的错误是人们认为
[x]
意味着这是任何列表(任何长度),但是
[x]
模式匹配一个带有as元素
x
的单例列表。