【发布时间】:2021-12-20 02:44:23
【问题描述】:
我确实有以下问题:
我得到一个输入(整数列表),我想输出一个三元组(列表的长度、列表的总和以及列表的最大值)。
我确实有以下功能:
lengthSumMax :: Num a => [a] -> (Int, a, a)
lengthSumMax [] = (0, 0, 0)
lengthSumMax x = (length x, sum x, maximum x) --maximum is just a place holder
我知道最大值不起作用,因为我在此函数中没有 Ord。有没有一种递归方法,您可以在不使用 Ord 或辅助函数的情况下“手动”找到列表的最大值?
【问题讨论】:
-
如果你得到
Integers的列表,那么签名应该是[Integer] -> (Int, Integer, Integer),或者你可以使用Integral a => [a] -> (Int, a, a),因为Integral a暗示Ord a。另一种可能性是使用排序函数来确定两个项目中哪一个是最大的。 -
Num 可以是一个复数,其中不清楚如何比较大小。你能用比 Num 更窄的东西吗,比如 Real?