Сочетание модификации и объединения строк в haskell - PullRequest
0 голосов
/ 25 марта 2019

Таким образом, моя проблема состоит в том, чтобы взять строку в haskell и изменить ее так, чтобы при наличии определенных символов они менялись на другие символы, и я создал вспомогательную функцию для этого, однако есть один случай, когдасимвол "!"затем он становится «!!! 111oneone», так что я полагаю, что для этого вам нужно будет объединить текущую строку с «!! 111oneone», проблема в том, что моя функция работала с символами, однако для этого нам нужно работатьсо строкой, как бы вы скомбинировали это, то есть помощник для изменения символов, если это необходимо, и реализацию преобразования, если есть '!'.

Вот что у меня есть до сих пор

convert :: String -> String
convert [] = []
convert (x:xs) =
| x == '!'  = !helper
| otherwise = converthelper x

1 Ответ

4 голосов
/ 25 марта 2019

Предполагая, что ваш помощник похож на

helper :: Char -> String
helper '!' = "!!!111oneone"
helper c = [c]

, вы можете использовать concatMap для отображения helper на каждый символ в вашей строке, а затем объединить результаты в одну строку.

convert :: String -> String
convert = concatMap helper
-- convert msg = concatMap helper msg

Хитрость в том, что ваш помощник переводит каждый символ в список символов;большинство символов просто становятся соответствующей односимвольной строкой, но ! становится чем-то большим.

(Обратите внимание, что concatMap составляет основу Monad экземпляра для списков. Вы также можете написать convert msg = msg >>= helper.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...