在Haskell中交换对

时间:2014-01-19 16:58:39

标签: haskell

所以我有这个功能来交换haskell中的数字对,我不知道我做错了什么,也许你们可以帮我一臂之力。 所以基本上这个函数得到一个列表,比如,[1,2,3,4,5],并返回由对交换的数字,类似于[2,1,4,3,5]。如果元素的数量是奇数,则最后一个元素保持不变。

这就是我所做的:

swapPairs :: [a] -> [a]
swapPairs (x:xs) = [!!x = !!x+1 && !!x+1 = !!x| x <- xs]

2 个答案:

答案 0 :(得分:4)

-- Return first two elements in inverted order, recusively call for remaining list,
-- only matches lists of two or more elements
swapPairs (a:b:xs) = b : a : swapPairs xs
-- Return tail for zero or one remaining elements
swapPairs (xs)     = xs

答案 1 :(得分:2)

您可以使用模式匹配来获取2个头元素:

swapPairs (x:y:xs) = y : x : (swapPairs xs)