【发布时间】:2011-09-08 13:54:41
【问题描述】:
我试图解决一个在被函数映射后需要列表最大值的问题。该列表是从 a 到 b 的范围,其中 a>b 或 b>a。因为 Haskell 还可以定义递减列表,所以我认为我不需要检查 a>b 是否也不需要将边界翻转到 b..a。该函数看起来有点像这样:
f a b = maximum . map aFunction $ [a..b]
但是如果列表在减少,即 a>b,那么 Haskell 会给我一个例外:
Prelude.maximum: empty list
因此,由于某种原因,递减列表将空列表交给了最大值函数。这是为什么呢?
我知道maximum 是根据foldl1 max 定义的,而foldl1 需要一个非空列表,但我不知道为什么像[10..1] 这样的列表在交给foldl1 时是空的.
【问题讨论】:
-
[10..1]无论你用它做什么都是空的(即使你没有把它交给foldl1)。这就是定义范围的方式。