【发布时间】:2011-11-13 19:28:44
【问题描述】:
我想知道如何在 Haskell 中交换列表的第二个元素。
示例输出应如下所示:
swap [1,2,3,4,5]
[2,1,4,3,5]
到目前为止我所拥有的是
swap :: [a] -> [a]
swap [] = []
swap (x:xs) = head xs : [x]
但这只会交换前两个元素,当我尝试加载包含该函数的文件时,我为使函数递归所做的任何尝试都会导致错误。如何使其递归?
【问题讨论】:
-
展示你的尝试和它导致的错误怎么样?
-
我想做的是 swap (x:xs) = head xs : [x] swap xs 。尝试加载文件时的错误是 "haskell.hs:3:25: The function
[x]' is applied to two arguments, but its type[a]' has none 在(:)', namely[x] 的第二个参数中交换 xs' 在表达式中:head xs : [ x] swap xs 在 `swap' 的等式中:swap (x : xs) = head xs : [x] swap xs 失败,加载模块:无。"