当我注意到 Elm不支持列表理解时,我试图在Elm中模拟魔方.在Haskell甚至是Python中,我会写一些类似于: ghci [2*c | c - [1,2,3,4]][2,4,6,8] 我在榆树找不到路.我必须写的实际列表理解是(在Haskell中
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 ::(积分a,Num b)=> a – > b将整数转换为Num.
在Elm中,我尝试使用Arrays:
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
我不知道这是否有效或正确,但它在我尝试的情况下有效.
我想我的两个主要问题是:
>榆树是否支持列表理解? (我想只是用地图)
>如何绕过Array示例中的类型?
>调用head(drop n x)来获取列表的第n个元素是否有效?
风格指南Evan所说的“喜欢地图,过滤和折叠”,所以..使用`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 只是x – > X 没什么 – >崩溃“(!!)索引错误”