繁体   English   中英

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

[英]Haskell, reverse two elements in list?

我想列出一个清单,并总是反转两个元素。 例:

输入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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM