Выявление повторяющихся последовательных цифр в конце строки в haskell - PullRequest
0 голосов
/ 29 декабря 2011

Поэтому я пишу функцию с определением

getLastDigits :: String -> String

, которая находит повторяющиеся цифры в конце строки

Так, например.

getLastDigits "1000" should give "000"
getLastDigits "19990299" should give "99"

Исходя из Java-фона, я не совсем уверен, как структурировать эту программу.Я думаю об использовании foldr, но я вполне уверен, что не смогу остановить сгиб на полпути, когда заканчиваются повторяющиеся цифры.

-дит решен.Используйте групповую функцию.

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Хорошо, тогда, если это не домашнее задание:

lastDigits :: String -> String
lastDigits s = firstDigits . reverse $ s
  where firstDigits :: String -> String
        firstDigits (x:xs) = x : takeWhile (== x) xs
        firstDigits [] = []
1 голос
/ 29 декабря 2011
import Data.Char (isDigit)

getLastTheSame :: Eq a => (a -> Bool) -> [a] -> [a]
getLastTheSame pred xs = f (reverse xs)
  where f (y : ys) | pred y = y : takeWhile (== y) ys
        f _                 = []

lastDigits :: String -> String
lastDigits = getLastTheSame isDigit

Вы говорите, что хотите повторять цифры от конца строки.Я предполагаю, что если последний символ не является цифрой, то вы хотите вернуть пустую строку.

Напомним, что type String = [Char].

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