当我注意到 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 -> b
转 Integer
进入 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
我不知道这是否有效或正确,但它在我尝试的情况下有效。
我想我的两个主要问题是:
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/