3

私の番号は9877342931235です。Haskellを使用して、次のように表示する必要があります。

987-734293-123-5

私はリストを散在させようとしましたが、もちろんそれはすべての桁の間に「-」を入れます。実際の結果を出すにはどうすればよいですか?

4

2 に答える 2

6

リストを指定された長さの部分に分割し、指定された区切り文字でそれらを結合するための簡単な一般的な解決策を次に示します。

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、あなたが望むものをあなたに与えるでしょう。

更新:以下のコメントでAntal SZが指摘しているように、関数 fromData.Listおよびを使用すると、この関数をより簡潔に実装できData.List.Splitます。

splitercalate chunks sep = intercalate sep . splitPlaces chunks

パッケージをインストールしsplit(おそらく のようなことを行って)、関数と関数cabal install splitをインポートする必要があります。intercalatesplitPlaces

import Data.List (intercalate)
import Data.List.Split (splitPlaces)

2 つのバージョンは同等である必要があります。import余分なs やパッケージへの依存が気にならない場合はsplit、Antal SZ を使用してください。はるかに優れています。

于 2010-05-31T04:20:51.063 に答える
0

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

于 2010-05-31T09:20:49.480 に答える