Я пытаюсь создать функцию, которая выбрасывает каждый n-й элемент из строки.Haskell - функция возвращает пустой символ
dropEvery :: String -> Int -> String
dropEvery str n = map (\(char, indx) -> if indx `mod` n /= 0 then char else ' ') (zip str [1..])
Сейчас он просто заменяет каждый элемент n-й с пространством, но то, что я должен поставить после «другой», если я хочу, чтобы вернуть «пустой символ». Я понимаю, что такой вещи не существует в Haskell, поэтому вопрос заключается в том, как я должен сказать Haskell, чтобы он ничего не возвращал и просто перешел к следующему символу?
Я попытался поставить «[]» после «else», но, конечно же, получил ошибки типа. concatMap - хорошая идея. –
@ RaulŠpilev Проблема исходит из предположения, что есть что-то, называемое «пустым« Char ». Это было бы как «пустой' Int' »или« пустой Bool », вы можете иметь' Int', который равен 0, но не тот, у которого нет значения вообще (не считая 'undefined') , Чтобы иметь пустоту, вам нужен контейнер. Строки являются контейнерами, поскольку они просто представляют собой список '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ], чтобы выйти из '[Char]'. – bheklilr