你如何在 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和元组被赋予参数)

《Python基础教程》第二章:列表和元组

请问列表和元组.怎么学.我看了半天没看懂怎么用,这个有啥用,求解谢谢

如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?

使用列表和元组

python入门:列表和元组