【发布时间】:2019-11-06 10:32:17
【问题描述】:
我刚刚开始学习 Haskell。据我所知maximum 给出了整数列表的最大值。所以,maximum [2,5,7,1] 给出 7。但是为什么通过给出一个元组输入,最大值总是给出第二个元素?例如,maximum (8,1) 给出 1。sum (8,1)、product (5,2)、minimum (4,5)... 都给出了元组的第二个元素。那么,任何人都可以向初学者解释为什么会发生这种情况吗?
【问题讨论】:
-
一个关键的问题是,对于 元组,允许 2 个元素的类型不同,因此 (8, True) 和 (True, 8) 是完全合法的Haskell 表达式。所以没有通用的方法来定义一个既通用又直观地令人满意的最大函数。对于lists,所有元素必须是同一类型,所以[True, 8] 是非法的,而maximum [8,1] 和maximum [1,8] 都是合法的并且计算结果为8 ,正如您直觉所期望的那样。
-
元组不是列表意义上的序列。它们是带有多值标签的单值。
(8, 1)可以认为是1,带有8的标签;(1,2,3,4,5)可以被认为是一个5,具有四个可区分标签1、2、3和4。