2016-02-11 3 views
0

Мне нужно сделать функцию Haskell, называемую markDups, которая обрабатывает строку, заменяя все повторяющиеся вхождения символа символом подчеркивания «_».Как заменить букву в строке на Haskell

вот мой код, который я сделал до сих пор.

makeBar :: Char -> [Char] -> [Char] 
makeBar c (x:xs) | c == x = '_':makeBar c xs --turn into a "_" 
        | otherwise = x:makeBar c xs--ignore and move on 

, когда я запускаю это, вот мой выход с сообщением об ошибке enter image description here

выход должен быть, как этот

enter image description here

что я должен делать?

+0

Вы должны добавить случай для пустых списков. Дайте инструкции для того, что должен делать makeBar, когда он передается что-то вроде 'makeBar 'o' []'. –

ответ

1

Это похоже на работу:

import Data.Set 
main = putStrLn (markDups "hello world" empty) 


markDups :: [Char] -> Set Char -> [Char] 
markDups [] set = [] 
markDups (x:rest) set 
| member x set = '_':(markDups rest set) 
| otherwise = x:(markDups rest (insert x set))