我想在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) 我想创建一个打印列表前缀的Haskell函数:
该功能应该执行以下操作:
> prefixes "123"
["","1","12"]
> prefixes "1"
[""]
Run Code Online (Sandbox Code Playgroud)
我写了以下代码:
prefixes :: [a] -> [[a]]
prefixes [] = []:[]
prefixes f = f : prefixes(init(f))
Run Code Online (Sandbox Code Playgroud)
该函数将输入的字符串或字符作为前缀打印,并以相反的方向打印.我想删除它,所以当我输入"123"时,它应该如上所示打印并以正确的方向显示.
我们可以用:
reverse (drop 1 f)
Run Code Online (Sandbox Code Playgroud)
命令,但我不知道如何在我的函数中实现它.
你可以帮我解决这个问题,以便它能正确打印出来.