gpt4 book ai didi

haskell - 为什么当 a > b 时 [a..b] 是一个空列表?

转载 作者:行者123 更新时间:2023-12-02 08:48:58 26 4
gpt4 key购买 nike

如果我在 Haskell 控制台中输入 [5..1] ,它会返回 [],而我期望的是 [5, 4, 3, 2, 1]

一般来说,如果a > b,则[a..b] = []。为什么?

最佳答案

报告涵盖了详细信息。在 Section 3.10 :

Arithmetic sequences satisfy these identities:

[ e1..e3 ]    =   enumFromTo e1 e3

Section 6.3.4 :

For the types Int and Integer, the enumeration functions have the following meaning:

  • The sequence enumFromTo e1 e3 is the list [e1,e1 + 1,e1 + 2,…e3]. The list is empty if e1 > e3.

For Float and Double, the semantics of the enumFrom family is given by the rules for Int above, except that the list terminates when the elements become greater than e3 + i∕2 for positive increment i, or when they become less than e3 + i∕2 for negative i.

那么下一个问题是“为什么报告要这样指定?”。我认为答案是,对于数学家来说,这种选择是很自然的,原委员会的大多数成员在某种程度上都是如此。它还具有许多不错的属性:

  • 如果 [x..y]n 个值,则 [x..y-1][x +1..y]n-1 个值(其中 n-1 中,减法在 0 处饱和,咳咳> 自然选择)。
  • 检查特定元素是否在[x..y]范围内只需检查它是否大于x且小于y code> -- 您无需首先确定 xy 哪个更大。
  • 它可以防止一类令人惊讶的差一错误:如果您想获取 x 之后的下一个 n>=0 元素,您可以编写 [x..x+n-1]。如果您选择其他规则,其中 [x..y] 可能意味着 [y,y+1,...,x] if y 较小,无法使用 [_.._] 语法创建空列表,因此没有统一的方法来获取接下来的 n 元素。就必须写出更麻烦的 if n>0 then [x..x+n-1] else [];而且很容易忘记写这张支票。

如果您想要列表[5,4,3,2,1],可以通过指定显式的第二步来实现,如[5,4.. 1].

关于haskell - 为什么当 a > b 时 [a..b] 是一个空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838473/

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