在Haskell中使用匿名函数跟踪列表索引

时间:2013-05-16 13:31:51

标签: haskell

我对Haskell很新。所以这可能有点傻。

我想要做的事情是:

map (\x -> x + **position in list**) [0, 0, 0] => [1, 2, 3]

如何做到这一点?

2 个答案:

答案 0 :(得分:9)

获取索引的最简单方法是使用[0..](或[1..],如果您想要基于1的索引)压缩列表,例如:

> zipWith (\i x -> x + i) [1..] [0, 0, 0]
[1,2,3]

答案 1 :(得分:6)

目前,我们假设您要将每个元素与其在列表中的位置配对。这样做的简单方法是:

λ> zip [0..] [0, 0, 0]
[(0,0),(1,0),(2,0)]

如果您真正想要的只是索引,那么您需要的只是n的第一个[0..]元素,其中n是输入列表的长度。所以......

λ> let xs = [0,0,0]
λ> [0..length xs - 1]
[0,1,2]

或者,相当于

λ> take (length xs) [0..]
[0,1,2]