我有一份清单
let a = [1,2,3,4]
我想一次提取2个元素来执行计算。谁能告诉我这是如何实现的?我是Haskell的新手。
我知道take 2 a
。但是我如何将它放在一个循环中,以便一次提取2个元素。我很困惑。
答案 0 :(得分:5)
这是一个例子。您(或应该)熟悉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
答案 1 :(得分:4)
您可以在您感兴趣的元素上编写自己的递归函数和模式匹配:
f (a:b:list) = doSomeThingWith a b : f list
确保在[]
和[a]
个案件中正确匹配。