モジュールを使う
単語が複数含まれた文字列から各単語が何回現れるかを求めたい。
以下のモジュールと関数を組み合わせる。
Data.List
のwords
空白で区切られた単語をリストにする。
*Main Lib Data.List> words "foo bar hoge hooogle" ["foo","bar","hoge","hooogle"]
Data.List
のgroup
隣接する同じ要素をリストにまとめたリストを返す。
*Main Lib Data.List> group [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4] [[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4]]
要素を隣接させるために、Data.List
のsort
も使う
*Main Lib Data.List> sort [1,2,1,2,3,3,1,4,5,4] [1,1,1,2,2,3,3,4,4,5]
組み合わせる
import Data.List wordNums :: String -> [(String, Int)] wordNums = map (\ws -> (head ws, length ws)) . group . sort . words
与えられたリストがwords
,sort
,group
,map
の順で処理される。
実行結果
*Main Data.List> wordNums "yahoo google hoogle yahoo apple apple hoogle" [("apple",2),("google",1),("hoogle",2),("yahoo",2)]
所感
関数合成は見た目がスッキリしてよい。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る