list - elm 列表推导,检索列表的第 n 个元素

标签 list haskell maybe elm

当我注意到 Elm 时,我正试图在 Elm 中模拟魔方。不支持列表推导。在 Haskell 甚至 Python 中,我会写如下内容:

ghci> [2*c | c <- [1,2,3,4]]

[2,4,6,8]

我在榆树找不到路。我必须编写的实际列表理解是(在 Haskell 中):

ghci> let x = [0,1,3,2]
ghci> let y = [2,3,1,0]
ghci> [y !! fromIntegral c | c <- x]

[2,3,0,1]

在哪里 fromIntegral :: (Integral a, Num b) => a -> bInteger进入 Num .

在 Elm 中,我尝试使用数组:

x = Array.fromList [0,1,3,2]
y = Array.fromList [2,3,1,0]
Array.get (Array.get 2 x) y

我开始遇到 Maybe 的问题类型:
Expected Type: Maybe number
Actual Type: Int

事实上,我必须查一下它们是什么。我没有解决可能的问题,而是对列表做了一些事情:

x = [0,1,3,2]
y = [2,3,1,0]

f n = head ( drop n x)
map f y

我不知道这是否有效或正确,但它在我尝试的情况下有效。

我想我的两个主要问题是:
  • Elm 支持列表推导吗? (我猜只是使用 map )
  • 如何绕过 maybe数组示例中的类型?
  • 调用head ( drop n x) 有效率吗?获取列表的第 n 个元素?
  • 最佳答案

    Elm 不支持列表解析:https://github.com/elm-lang/Elm/issues/147

    埃文提到的风格指南说“更喜欢 map ,过滤器和折叠”,所以..使用`map:

    map ((y !!).fromIntegral) x
    

    或者
    map (\i-> y !! fromIntegral i) x
    

    评论者指出 (!!) 不是有效的 Elm(它是有效的 Haskell)。我们可以将其定义为:
    (!!) a n = head (drop n a) , 总函数。

    也许 (!!) a n = case (head (drop n a)) of Just x -> x Nothing -> crash "(!!) index error"

    关于list - elm 列表推导,检索列表的第 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248907/

    相关文章:

    java - 在java集合中查找具有相同id的所有最新记录

    C# 将时间列表拆分为时间范围

    css, li 全宽 ul

    haskell - 为什么 zipWith.zipWith 有效?

    haskell - Haskell 中类型级别 Nats 的一致性

    python - 在python中访问字典列表中的元素

    haskell - 删除特定类别窗口的边框

    在 Haskell 中定义为 Maybe 的列表?为什么不?

    haskell - 使用 Haskell 的 "Maybe",类型声明[初学者的问题]

    haskell - 从 [Maybe a] 中提取第一个 Just 值