list - Haskell函数交换列表中的第二个元素

标签 list haskell recursion

我想知道如何在 Haskell 中交换列表的每个第二个元素。

示例输出应如下所示:

swap [1,2,3,4,5]  
[2,1,4,3,5]

我目前的情况是

swap :: [a] -> [a]  
swap [] = []  
swap (x:xs) = head xs : [x]

但这只会交换前两个元素,并且当我尝试加载包含该函数的文件时,我为使函数递归所做的任何尝试都会导致错误。如何使其递归?

最佳答案

一次需要抓取2个元素:

swap [] = []
swap (x:y:rest) = y:x:(swap rest)
swap [x] = [x]

需要最后一行来允许奇数长度列表——它匹配长度恰好为 1 的列表,因此它不会与其他 2 种情况(长度为 0 和长度为 2 或更多)中的任何一种重叠。

关于list - Haskell函数交换列表中的第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114052/

相关文章:

Python:根据值/条件创建子列表

jQuery 显示/隐藏常见问题列表元素的切换器

python - 如何轻松地从 Haskell 过渡到 Python 3

arrays - 随着分配更多的盒装数组,代码变得更慢

c# - 生成一系列递归字母(如 Excel 列标题)

c# 递归反射和通用列表设置默认属性

c++ - c++中的置换计算

python - 删除空列表元素

python - 来自多个列表的父子结构

haskell - 输入函数的签名来查找向量的大小