List Haskell,颠倒列表中的两个元素?
我想要一个列表,并始终反转两个元素。 例如: 输入1:List Haskell,颠倒列表中的两个元素?,list,haskell,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,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,2,3,4,5]
上。其运行方式如下:
g1 [1,2,3,4,5]
= 1 : 2 : g1 [3,4,5]
= 4 : 3 : g1 [5]
并且没有为包含单个元素的列表定义模式(此处为[5]
)。根据第一个示例,在这种情况下,除了发出元素外,不应执行任何操作。因此,您必须添加案例:
g1 [x] = [x]
或整个函数定义:
g1 [] = []
g1 [x] = [x]
g1 (x:y:xs) = y: x: g1 xs
g1[]=[]
g1[x]=[x]
g1(x:y:xs)=y:x:g1xs
问题是,当您在列表
[1,2,3,4,5]
上应用此选项时。其运行方式如下:
g1 [1,2,3,4,5]
= 1 : 2 : g1 [3,4,5]
= 4 : 3 : g1 [5]
并且没有为包含单个元素的列表定义模式(此处为[5]
)。根据第一个示例,在这种情况下,除了发出元素外,不应执行任何操作。因此,您必须添加案例:
g1 [x] = [x]
或整个函数定义:
g1 [] = []
g1 [x] = [x]
g1 (x:y:xs) = y: x: g1 xs
g1[]=[]
g1[x]=[x]
g1(x:y:xs)=y:x:g1xs
您需要为一个元素列表添加一个案例,如果该列表包含奇数个元素,您将命中该列表。对于包含单个元素的列表,应该做什么?您需要为一个元素列表添加一个案例,如果该列表包含奇数个元素,您将命中该列表。对于包含单个元素的列表,应该做什么?啊,现在我明白!我不知道Haskell是如何使用这个函数来解决这个问题的。。。谢谢你!啊,现在我明白了!我不知道Haskell是如何使用这个函数来解决这个问题的。。。谢谢你!