fugafuga.write

日々のログ

すごいH本 part27

モジュールを使う

単語が複数含まれた文字列から各単語が何回現れるかを求めたい。

以下のモジュールと関数を組み合わせる。

Data.Listwords

空白で区切られた単語をリストにする。

*Main Lib Data.List> words "foo bar hoge hooogle"
["foo","bar","hoge","hooogle"]

Data.Listgroup

隣接する同じ要素をリストにまとめたリストを返す。

*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.Listsortも使う

*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)]

所感

関数合成は見た目がスッキリしてよい。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

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