【发布时间】:2019-02-23 23:54:47
【问题描述】:
如果这个问题非常琐碎,我很抱歉,但我已经努力寻找答案很长一段时间了,这就是我决定在这里发布它的原因。
我想构建一个函数,它采用二进制元组列表:[(Integer, Integer)] 并从所有元组的所有第二个整数中输出最大整数。我写了以下代码:
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 个元素组成的)。有什么解释吗?
谢谢!!
【问题讨论】:
-
提示:一个常见的错误是人们认为
[x]表示这是any 列表(任意长度),但[x]模式匹配singleton 列表,作为元素x.