文字の出現頻度を調べる
[*** Text版]
Data.Text.unpack :: Text -> Stringを使ってStringに変換してから,String版commonChars' :: String -> [(Char, Int)]を使って調べます.
インポート
code: (haskell)
import Data.Text as T
[** commonChars :: Text -> [(Char, Int)]]
code: (haskell)
commonChars = commonChars' . T.unpack
[*** String版]
インポート
code: (haskell)
import Data.List as L
import Data.Ord
[** commonChars' :: String -> [(Char, Int)]]
code: (haskell)
commonChars' = frequency
type RunLength a = (a, Int)
frequency = L.sortBy (flip (comparing snd)) -- 4. ランレングスによる降順ソート
. L.map runLength -- 3. ランレングス付ける
. L.group -- 2. グループ化する
. L.sort -- 1. ソートする
runLength :: a -> RunLength a runLength = (,) . L.head <*> L.length
評価例
code:_
>> :set -XOverloadedStrings
>> commonChars "3.14159265358979"
('5',3),('9',3),('1',2),('3',2),('.',1),('2',1),('4',1),('6',1),('7',1),('8',1)