Функция поворота в Haskell - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу написать в Haskell функцию, которая поворачивает список, заданный в качестве второго аргумента, на количество позиций, указанных в первом аргументе.Используя сопоставление с образцом, реализуйте рекурсивную функцию

. Я написал следующую функцию:

rotate :: Int -> [a] -> [a]
rotate 0 [y]= [y]
rotate x [y]= rotate((x-1) [tail [y] ++ head [y]])

, но эта функция всегда выдает ошибку.Есть ли способ решить это?Функция должна делать следующее при запуске:

rotate 1 "abcdef"
"bcdefa"

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я думаю, вы хотите что-то вроде этого:

rotate :: Int -> [a] -> [a]
rotate 0 x = x
rotate times (x:xs) = rotate (times - 1) (xs ++ [x])
0 голосов
/ 27 сентября 2018

[y] не означает «пусть y будет списком».Это означает, что «этот аргумент является списком, содержащим один элемент с именем y».У вас правильная структура, но вам не нужны скобки вокруг y.

rotate :: Int -> [a] -> [a]
rotate 0 y = y
rotate x y = rotate (x-1) (tail y ++ [head y])
...