【问题标题】:Haskell-like range in PureScript?PureScript 中类似 Haskell 的范围?
【发布时间】:2019-05-17 15:06:52
【问题描述】:

是否有一个行为类似于 Haskell 范围的本机函数?

我发现 2..1 在 PureScript 中返回一个列表 [2, 1],这与 Haskell 的 [2..1] 返回一个空列表 [] 不同。谷歌搜索后,我发现该行为写在Differences from Haskell 文档中,但没有给出背后的理由。

在我看来,这种行为有点不方便/不直观,因为当 len 为零时,0 .. (len - 1) 不会给出空列表,这可能会导致神秘的错误。

  1. 有没有办法在不每次都处理length == 0 的情况下获得预期的数组(即长度范围len 从0 递增)?
  2. 另外,为什么 PureScript 决定让 range 表现得像那样?

附:我是如何遇到这个问题的:我想写一个getLocalStorageKeys 函数,它从本地存储中获取所有密钥。我的实现使用length 函数获取键的数量,创建从0 到numKeys - 1 的范围,然后使用key 函数遍历它。但是,该范围的行为与我预期的不同。

【问题讨论】:

    标签: purescript


    【解决方案1】:

    自己做怎么样?

    indicies :: Int -> Array Int
    indicies n = if n <= 0 then [] else 0..(n-1)
    

    至于“为什么”,我只能推测,我的推测是避免这种用于创建“反向”范围的iffy 逻辑——这对我来说确实是Haskell 偶尔。

    【讨论】:

    • 我想我应该这样做。您必须为反向范围创建 if-fy 逻辑吗?这是常见的情况吗?
    • 在这种情况下,我需要以相反的顺序列出此类列表。无论如何,这并不常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2022-12-02
    • 2011-10-11
    • 1970-01-01
    • 2015-01-19
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多