Data.List.Split を使ってみる。

Data.List.Split はリストを分割するためのライブラリです。

  • インストール は cabal install split で OK。
> cabal install split
Resolving dependencies...
Downloading split-0.1.2...
Configuring split-0.1.2...
(snip)
Reading package info from "dist\\installed-pkg-config" ... done.
Writing new package config file... done.
  • 使ってみる。
Prelude> :m + Data.List.Split
-- 文字列で分割
> splitOn "x" "axbxc"            --=> ["a","b","c"]
> splitOn "x" "axbxcx"           --=> ["a","b","c",""]
> splitOn ".." "a..b...c....d.." --=> ["a","b",".c","","d",""]

-- 終端文字列で分割
> endBy ";" "foo;bar;baz;" --=> ["foo","bar","baz"]

-- 条件式で分割
> splitWhen (<0) [1,3,-4,5,7,-9,0,2]  --=> [[1,3],[5,7],[0,2]]
> splitWhen (<'b')  "sirocco_jp"      --=> ["sirocco","jp"]

-- 複数の分割条件
> splitOneOf ";.," "foo,bar;baz.glurk"["foo","bar","baz","glurk"]

-- 固定長分割
> splitEvery 3 ['a'..'z'] -==> ["abc","def","ghi","jkl","mno","pqr","stu","vwx","yz"]
-- chunk は splitEvery の別名(synonym)です。
> chunk 5 ['a'..'z']      -==> ["abcde","fghij","klmno","pqrst","uvwxy","z"]

-- 長さを指定して分割
> splitPlaces [2,3,4] [1..20] --=> [[1,2],[3,4,5],[6,7,8,9]]
> splitPlaces [1,2,3,4,5,6] ['a'..'z']
    --=> ["a","bc","def","ghij","klmno","pqrstu"]

>  wordsBy (=='x') "dogxxxcatxbirdxx" ["dog","cat","bird"]

split-0.1.2: Combinator library for splitting lists.: 他にも分割方法あります。