對於Haskell,我很新。所以這可能有點愚蠢。在Haskell中使用匿名函數跟蹤列表索引
我要的是做這樣的事情:
map (\x -> x + **position in list**) [0, 0, 0] => [1, 2, 3]
如何才能做到這一點?
對於Haskell,我很新。所以這可能有點愚蠢。在Haskell中使用匿名函數跟蹤列表索引
我要的是做這樣的事情:
map (\x -> x + **position in list**) [0, 0, 0] => [1, 2, 3]
如何才能做到這一點?
獲得指標的最簡單的方法是用[0..]
拉上你的列表(或[1..]
,如果你想從1開始的索引),例如:
> zipWith (\i x -> x + i) [1..] [0, 0, 0]
[1,2,3]
就目前而言,我們假設要配對的每個元素在列表中的位置。最簡單的方式做到這一點是:
λ> zip [0..] [0, 0, 0]
[(0,0),(1,0),(2,0)]
如果你真正想要的是指數,那麼所有你需要的是[0..]
,其中n
是輸入列表的長度第一n
元素。所以......
λ> let xs = [0,0,0]
λ> [0..length xs - 1]
[0,1,2]
或者等價地,
λ> take (length xs) [0..]
[0,1,2]
它運作良好,謝謝!你知道是否有任何方法將它與相反的位置一起使用? (結果會是[3,2,1])我嘗試了使用'長度列表',但它似乎是不正確的。 – cgf
@cgf:[這是問題嗎?](http://stackoverflow.com/questions/6806455/decrementing-ranges-in-haskell) – hammar
是的,就是這樣。非常感謝! – cgf