Я новичок в Haskell, и я пытаюсь написать функцию, которая сжимает строку символов + число последовательных появлений этого символа, такие как: aaaabccc -> a4bc3Haskell - Строка сжатия
до сих пор я есть что-то вроде:
comp :: String -> Int -> String
comp [] n =[]
comp (x:x1:xs) ct = if(x==x1) then comp (x1:ct:xs) (ct+1) else if(ct>0) then comp (x1:xs) (0) else comp (x1:xs) (0)
comp (x:xs) n = x:xs
main = do
a <- getLine
putStrLn $ comp a 0
но я получаю следующую ошибку
main.cpp:4:45:
Couldn't match expected type `Char' with actual type `Int'
In the first argument of `(:)', namely `ct'
In the second argument of `(:)', namely `ct : xs'
In the first argument of `comp', namely `(x1 : ct : xs)'
Вы знаете, что ваш последний 'if' абсолютно излишними правильно? –
Вы не можете делать 'x1: ct: xs',' ct' имеет тип 'Int', а' x1' - 'Char', а' xs' - '[Char]'. Вы хотите сделать «x1: показать ct ++ xs» или что-то подобное. – Bakuriu
Кстати. Вы можете просто использовать 'Data.List.group' и написать что-то вроде' comp xs = concatMap (\ ys -> head ys: show (length ys)) $ group xs' (не тестировалось) – Bakuriu