我公司擁有一批9877342931235.使用哈斯克爾,我需要將其顯示爲:哈斯克爾 - 解釋了一些
987-734293-123-5
我試過點綴列表中,但當然是在每個數字之間放置' - '。我怎麼做才能得到實際的結果?
我公司擁有一批9877342931235.使用哈斯克爾,我需要將其顯示爲:哈斯克爾 - 解釋了一些
987-734293-123-5
我試過點綴列表中,但當然是在每個數字之間放置' - '。我怎麼做才能得到實際的結果?
下面是一個分裂成列表指定長度的部分,然後用指定的分隔符一起加入他們一個簡單通用的解決方案:
splitercalate :: [Int] -> [a] -> [a] -> [a]
splitercalate (x:[]) _ s = take x s
splitercalate (x:xs) delim s =
case splitAt x s of
(a, []) -> a
(a, bs) -> a ++ delim ++ splitercalate xs delim bs
在你的情況splitercalate [3, 6, 3, 1] "-" $ show 9877342931235
會給你想要的東西。
UPDATE:
splitercalate chunks sep = intercalate sep . splitPlaces chunks
您需要安裝split
包(可能是這樣做的:作爲Antal S-Z筆記在下面留言,您可以通過使用功能從Data.List
和Data.List.Split
更簡潔實現這個功能像cabal install split
),並導入intercalate
和splitPlaces
功能:
import Data.List (intercalate)
import Data.List.Split (splitPlaces)
這兩個版本應該是等效的。如果您不介意額外的import
和對split
程序包的依賴,請使用Antal S-Z,它更好。
你的'splitercalate'功能等同於'splitercalate chunks sep = intercalate sep。 splitPlaces chunks'; 'intercalate'來自'Data.List','splitPlaces'來自['Data.List.Split'](http://hackage.haskell.org/package/split-0.1.2)。從我在StackOverflow上看到的答案來看,分割包真的沒有用 - 這太糟糕了,因爲包非常好。 – 2010-05-31 05:42:11
多數民衆贊成真棒,非常感謝的人 – Abstract 2010-05-31 06:06:54
Wats這個東西從data.list包雖然? – Abstract 2010-05-31 06:07:26
OK,如果你不希望使用Data.List.Split ...
import Data.List (intercalate)
splitPlaces (n:ns) x = let (h, t) = splitAt n x in h : splitPlaces ns t splitPlaces _ x = []
splitercalate chunks sep = intercalate sep . splitPlace chunks
你的回答是那麼concat . splitercalate [3,5,3,1] "-" $ show 9877342931235
你會怎麼做,在任何其他的語言嗎?轉換爲字符串,將數字組正則表達,並連接 - ?那麼,就在Haskell那裏做吧。 – jrockway 2010-05-31 02:59:08