我想要一个列表并始终反转两个元素。 例如:
输入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
有人有想法解决这个问题吗?
答案 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