我想知道是否會有一個簡明/單行的方式來執行以下操作:途徑包的列表的(相鄰的)元件成2元組
pack :: [a] -> [(a, a)]
pack [] = []
pack [_] = []
pack (x:y:xs) = (x, y) : pack xs
哪個是一樣的:
pack' xs = [(x, y) | (x, y, i) <- zip3 xs (tail xs) [0..], even i]
我對這兩個選項都沒有太大的反應,但我想知道:是否有更簡潔的方式將(,)
與其他函數結合使用?
我以爲會有這樣的一種方式,但它沒有我。所以這只是出於好奇。
謝謝!
沒了 - 你的版本確實'包[1,2, 3,4] = [(1,2),(2,3),(3,4)]而不是[(1,2),(3,4)]。 – rampion 2014-12-05 02:39:14
你可以縮短這一點,避免空列表問題,使用'pack xs = zip xs(drop 1 xs)'。這仍然有@rampion提到的問題。 – 2014-12-05 02:44:13
好的,我錯過了不應該包含'(2,3)'等的事實。我已經使用相同的推理更新了我的答案。 – Cactus 2014-12-05 02:45:44