你如何在 Haskell 中使用模式匹配和元组列表?
Posted
技术标签:
【中文标题】你如何在 Haskell 中使用模式匹配和元组列表?【英文标题】:How do you use pattern matching with lists of tuples in Haskell? 【发布时间】:2017-02-02 04:36:19 【问题描述】:我一直在尝试编写一个函数,它接受一个元组列表(在我的例子中,元组中的三个 Int 值)并返回列表中任何元组的最大总和。
这是我目前的尝试:
type Triples = [(Int, Int, Int)]
maxTotal :: Triples -> Int
maxTotal [] = error "ERROR: NO TUPLES"
maxTotal ((x,y,z):rest)
| sumTriple x y z > maxTotal rest = sumTriple x y z
| otherwise = maxTotal rest
sumTriple :: Int -> Int -> Int -> Int
sumTriple x y z = x + y + z
但是,每次我运行这个函数时,我都会得到错误输出...... Haskell 是将我的输入元组列表视为一个空列表,还是我在“否则”中循环到列表的末尾守卫然后到达错误?
【问题讨论】:
如果将sumTotal
的类型改为(Int,Int,Int) -> Int
,则maxTotal = maximum . fmap sumTriple
。
【参考方案1】:
原来我对 maxTotal 的定义不完整。我要补充的是:
maxTotal [(x,y,z)] = x + y + z
结案。
【讨论】:
您的算法似乎不清楚。为什么需要sumTriple
?
不用了,我加了上面一行之后就省略了以上是关于你如何在 Haskell 中使用模式匹配和元组列表?的主要内容,如果未能解决你的问题,请参考以下文章
从Haskell中的元组中提取第n个元素(其中n和元组被赋予参数)