的打印元素我有一個列表 let a = [1,2,3,4]
哈斯克爾:列表
我希望每次提取2元進行計算。誰能告訴我這是如何實現的?我是Haskell的新手。我知道take 2 a
。但是我怎麼能把它放在一個循環中,以便一次提取2個元素。我很困惑。
的打印元素我有一個列表 let a = [1,2,3,4]
哈斯克爾:列表
我希望每次提取2元進行計算。誰能告訴我這是如何實現的?我是Haskell的新手。我知道take 2 a
。但是我怎麼能把它放在一個循環中,以便一次提取2個元素。我很困惑。
您可以編寫自己的遞歸函數和模式匹配您感興趣的元素:
f (a:b:list) = doSomeThingWith a b : f list
確保正確匹配[]
和[a]
箱子。
下面是一個例子。您是(或者應當)熟悉map
功能:
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
在這裏,你可能有一個函數,它參數,並希望將其從名單同時適用於兩個元素。這是一個函數mapTwo
,其行爲如同map
,但具有雙參數函數。爲了簡單起見,我們假設列表中包含偶數個元素。
mapTwo :: (a -> a -> b) -> [a] -> [b]
mapTwo f [] = []
mapTwo f (x1:x2:xs) = f x1 x2 : mapTwo f xs
不應該是'mapTwo [x] =錯誤「不允許單身人士列表」的情況嗎? – epsilonhalbe
看到我的最後一句話。我只是不想進入如何處理一個奇數值的列表。 – chepner
相反,我不想提出部分函數的優點和缺點,使用'Maybe'或'Either',引發錯誤或使用異常monad。 – chepner
看一看的['splitAt'](https://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:splitAt)函數或['chunksOf '](https://hackage.haskell.org/package/split-0.2.3.1/docs/Data-List-Split.html#v:chunksOf) – ErikR
謝謝..但是,那麼我應該怎樣循環元組來執行計算? –
遞歸。 –