2013-05-16 118 views

回答

9

獲得指標的最簡單的方法是用[0..]拉上你的列表(或[1..],如果你想從1開始的索引),例如:

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

它運作良好,謝謝!你知道是否有任何方法將它與相反的位置一起使用? (結果會是[3,2,1])我嘗試了使用'長度列表',但它似乎是不正確的。 – cgf

+0

@cgf:[這是問題嗎?](http://stackoverflow.com/questions/6806455/decrementing-ranges-in-haskell) – hammar

+0

是的,就是這樣。非常感謝! – cgf

6

就目前而言,我們假設要配對的每個元素在列表中的位置。最簡單的方式做到這一點是:

λ> 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] 
+4

一個懶惰的方法,也適用於無限列表,使用'zipWith const [0 ..]'。 – hammar

+0

好的答案,但@hammar稍微快一點。謝謝! – cgf