Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell,颠倒列表中的两个元素?_List_Haskell - Fatal编程技术网

List Haskell,颠倒列表中的两个元素?

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:
[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是如何使用这个函数来解决这个问题的。。。谢谢你!