Haskell,反转列表中的两个元素?

时间:2016-05-03 19:27:45

标签: list haskell

我想要一个列表并始终反转两个元素。 例如:

输入1:[1,2,3,4,5],输出1:[2,1,4,3,5]

输入2:[1,2,3,4,5,6]输出2:[2,1,4,3,6,5]

我尝试了模式匹配:

g1 [] = []
g1 (x:y:xs) = y: x: g1 xs

但它说:

*Main> g1 [1,2,3]
*** Exception: test.hs:(13,1)-(14,27): Non-exhaustive patterns in function g1
g1

有人有想法解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

问题在于,当你应用它时,例如在列表days_challenged上。它运行如下:

[1,2,3,4,5]

并且没有为列表定义的模式包含一个单一元素(此处为g1 [1,2,3,4,5] = 1 : 2 : g1 [3,4,5] = 4 : 3 : g1 [5] )。根据你的第一个例子,在这种情况下不应该做什么,除了 emit 元素。所以你必须添加案例:

[5]

或整个功能定义:

g1 [] = []
g1 [x] = [x]
g1 (x:y:xs) = y: x: g1 xs