gpt4 book ai didi

list - 为什么 [1..n] 的处理方式与 Haskell 中的 [n..1] 不同?

转载 作者:行者123 更新时间:2023-12-04 16:22:28 25 4
gpt4 key购买 nike

我试图解决一个在被函数映射后需要列表最大值的问题。该列表是从 a 到 b 的范围,其中 a>b 或 b>a。因为 Haskell 还可以定义递减列表,所以我认为我不需要检查 a>b 是否也不需要将边界翻转到 b..a。该函数看起来有点像这样:

f a b = maximum . map aFunction $ [a..b]

但是,如果列表正在减少,即 a>b,那么 Haskell 会给我一个异常(exception):
Prelude.maximum: empty list

因此,由于某种原因,递减列表将空列表移交给最大函数。这是为什么?

我知道 maximum定义为 foldl1 maxfoldl1需要一个非空列表,但我不知道为什么像 [10..1] 这样的列表交给 foldl1 时为空.

最佳答案

[a..b]脱糖至 enumFromTo a b .对于标准数字类型(模数几个 float 的怪癖),这会不断添加一个直到你是 >= b .那么在哪里b < a这是空的。

您可以使用以下语法更改增量 [a,a'..b]然后以 a'-a 为增量执行步骤.所以[10,9..1]将是你想要的。

关于list - 为什么 [1..n] 的处理方式与 Haskell 中的 [n..1] 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com