2011-12-29 56 views
-2

上的字符串的末尾重複連續的數字所以我寫一個函數與定義識別在Haskell

getLastDigits :: String -> String 

指找到上的字符串的末尾重複的數字

因此,舉例來說。

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

來自java背景我不太清楚如何構造這個程序。我正在考慮使用foldr,但我相當肯定,當重複數字結束時,我無法停止摺疊。

- 已解決。使用組功能。

+1

如果您不先扭轉列表,則使用組效果可能非常低。你想要的東西像頭$ group $ reverse – Sarah 2011-12-29 11:44:11

+0

好的。我懂了。 (所以不會讓我發佈,除非我填充一點的長度) – 2011-12-30 01:51:21

回答

4

那好吧,如果不是功課:

lastDigits :: String -> String 
lastDigits s = firstDigits . reverse $ s 
    where firstDigits :: String -> String 
     firstDigits (x:xs) = x : takeWhile (== x) xs 
     firstDigits [] = [] 
+3

'lastDigits''應該叫'firstDigits' :) – newacct 2011-12-29 20:50:25

+0

@newacct好的,謝謝。編輯。 – 2012-01-01 04:05:13

1
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]