我想知道如何在 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/