У меня проблема с реализацией этой функции:
ТИП ПОДПИСЬ
wrap :: Int -> a -> [a] -> [a]
НАЗНАЧЕНИЕ
Вставка x
в каждую n
-ую позицию всписок xs
.
ПРИМЕРЫ
wrap 1 '+' "a" : "+a+"
wrap 2 '+' "a" : "+a"
wrap 2 '+' "abcd" : "+ab+cd+"
ОПРЕДЕЛЕНИЕ
wrap _ _ [] = []
wrap n x xs = insertAfter 0 xs
where insertAfter = undefined
Как можно реализовать это, я просто не могу понять это.РЕДАКТИРОВАТЬ:
Полный вопрос: Реализовать функцию wrap, которая генерирует список, который начинается со второго аргумента wrap (x), за которым следует столько записей из третьего аргумента wrap (xs), сколько продиктовано первым аргументом wrap (n).Повторяйте, пока третий аргумент не будет пустым.В результирующем списке каждый n-й элемент должен быть равен x.Вставьте x в конце, если длина xs равномерно делится на n.Подсказка: реализуйте функцию wrap в терминах функции insertAfter, которая принимает число m и список элементов xs, которые уменьшают m при удалении элементов из xs и вставляют x всякий раз, когда m достигает 0.
Я почти получилit:
wrap _ _ [] = []
wrap n x xs = insertAfter 0 xs
where insertAfter 0 xs = x : insertAfter n xs
insertAfter _ [] = undefined
insertAfter n xs = take n xs ++ (wrap n x (drop n xs))
, но на примере: wrap 2 '+' "abcd": wrap 2 '+' "abcd": "+ ab + cd +" Я получаю "+ ab + cd", поэтому«+» отсутствует.