Haskellのお勉強(2) 文字列のsplit
split
ちょっとずつHaskellに馴染んでいくためのいいかげんなお勉強。今日のお題は文字列のsplitだよ。あんちょこにググってみたらそのものの例があったんで試してみるよ。参考にしたのはHow to split a string in Haskell? - Stack Overflow。
import System.Environment import Text.Printf import Data.List.Split main = do print $splitOn " " "abc def 123 1.5"
早速動かしてみたよ。
~/haskell$ runghc strsplit.hs strsplit.hs:3:1: error: Failed to load interface for ‘Data.List.Split’ Use -v to see a list of the files searched for. ~/haskell$
ありゃ、なんかエラーが出た。参考にしたページをもう一回良く見てみたら、パッケージの導入が必要だったよ。ちろちろと斜め読みしたんで肝心なとこ見逃してた。
cabal
どうやらcabalってのがHaskellのパッケージ管理コマンドみたい。GHCをインストールしただけじゃこのコマンドは入ってなかったよ。というわけでまずcabalをインストールした。その後、splitパッケージをインストール。
~/haskell$ cabal update Config file path source is default config file. Config file /home/xxx/.cabal/config not found. Writing default configuration to /home/xxx/.cabal/config Downloading the latest package list from hackage.haskell.org ~/haskell$ cabal install split Resolving dependencies... Downloading split-0.2.3.3... cabal: Entering directory '/tmp/cabal-tmp-11850/split-0.2.3.3' Configuring split-0.2.3.3... Building split-0.2.3.3... Preprocessing library split-0.2.3.3... [1 of 2] Compiling Data.List.Split.Internals ( src/Data/List/Split/Internals.hs, dist/build/Data/List/Split/Internals.o ) [2 of 2] Compiling Data.List.Split ( src/Data/List/Split.hs, dist/build/Data/List/Split.o ) Creating package registration file: /tmp/pkgConf-split-0.2.32145174067468703135.3 Installing library in /home/xxx/.cabal/lib/x86_64-linux-ghc-8.0.2/split-0.2.3.3-KPq5EVv6rbi8XHTA0KJd3E Registering split-0.2.3.3... cabal: Leaving directory '/tmp/cabal-tmp-11850/split-0.2.3.3' Installed split-0.2.3.3 ~/haskell$
まずcabal updateしてからお目当てのsplitをインストールしたんだけど、この手順で良いのかな。
~/haskell$ runghc strsplit.hs ["abc","def","123","1.5"] ~/haskell$
お、動いた。動いたってことはちゃんとインストールされたってことかな。(いいかげんだな)
splitパッケージ
splitの詳細はData.List.Splitにあったよ。今回使ったsplitOn以外にも色々あるみたいだね。どういう実装になってるのか興味あるけど、今の知識じゃ中見ても理解できないだろうなあ。将来の課題にとっておこう。
雑感
今回は思いがけずパッケージの導入することになったけど、cabalっての知れたし結果的には良かったかな。他にも有用なパッケージがあるのかな。定番のパッケージの解説とかどっかに転がってないかなあ。