在Haskell中旋转函数

Aas*_*ari 2 recursion haskell pattern-matching

我想在Haskell中编写一个函数,它将第二个参数给出的列表旋转第一个参数指示的位置数.使用模式匹配,实现递归函数

我写了以下函数:

rotate :: Int -> [a] -> [a]
rotate 0 [y]= [y]
rotate x [y]= rotate((x-1) [tail [y] ++ head [y]])
Run Code Online (Sandbox Code Playgroud)

但此功能总是会产生错误.有什么办法可以解决吗?该函数在运行时应执行以下操作:

rotate 1 "abcdef"
"bcdefa"
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 6

[y]并不意味着"让我们y成为一个清单".这意味着"此参数是一个包含一个名为y"的元素的列表.你有正确的结构,但你不需要围绕的括号y.

rotate :: Int -> [a] -> [a]
rotate 0 y = y
rotate x y = rotate (x-1) (tail y ++ [head y])
Run Code Online (Sandbox Code Playgroud)