stMind

You'll never blog alone

[Haskell] Haskellな二日目

Haskellを勉強中。
UNIXコマンドのcatやhead、tailの作成を通して、主に標準入出力を使った
入出力とリスト処理について学んだ。


自分の備忘録の意味でやったことをちょっとおさらい。

AL Alabama
AK Alaska
AZ Arizona
・・
って感じのファイルを
「cs <- getContents」アクションで標準入力からすべて読み込んで、
変数csを入力した値に束縛する。csは
"AL\tAlabama\nAK\tAlaska\nAZ\tArizona\n・・"という文字列に
バインドされるので、「putStr cs」で標準出力に出力したり(cat)、
「putStr $ unlines $ take n $ lines cs」で先頭からn行を
出力する(head)などが実現できる。
ちなみにheadの処理を分解すると下のようになる。
1.「lines cs」で行毎のリストに変換
  ["AL\tAlabama", "AK\tAlaska", "AZ\tArizona", ・・]
2.「take n $ lines cs」でリストの先頭からn個を含むリストを返す
3.「unlines $ take n $ lines cs」で改行を含む文字列にする
  "AL\tAlabama\nAK\tAlaska\n"(nが2の場合)
4.3の文字列をputStrで標準出力へ出力する


あと、エディタはxyzzyにhs-modeをインストールして使っている。
Haskell mode for xyzzy
で、インストールしてみると「名前が衝突するのでexportできません」という
エラーが出たので下のページに書いてある通りに修正。
無事エラーが出なくなりました。
Haskell mode for xyzzy