Haskell のお勉強 その6

 以下のプログラムは、複数行の文字列からはじめの2行を
 表示するheadコマンド。

head.hs

main = do cs <- getContents
          putStr $ firstNLines 2 cs
          
firstNLines n cs = unlines $ take n $ lines cs

 上のプログラムをコンパイルして実行すると、
 以下の結果となる。

$ ghc head.hs -o head
$ ./head < test_hoge
hoge0
hoge1

 head.hsに記載されたプログラムを、分解していく。
 今回の目玉は、関数の定義と適応(C言語でいうところの関数呼び出し)が、
 行われていること。

 関数の定義部分は、以下の部分

firstNLines n cs = unlines $ take n $ lines cs

 「firstNLines」は、関数名。
 「n cs」は引数なので、この関数は引数を2つ取るものであることがわかる。
 「=」以降が、関数の処理。
 
 ここで一つ気になったんだけど、この関数の定義を見てみると
 「main = 」っていうのも、main関数ってことなんだろうか?
 参考書の最初で、「変数」という記載があったんだけど、どうなんだろう?
 
 ...mainは、主関数とのこと。


 firstNLines関数は、「lines」関数で引数で得た、文字列を行ごとに
 リストに格納し、「take」関数で、リストから n 個(プログラム中2個)の
 要素を取りだし、「unlines」でリストを連結、結果を返すもの。

 あとは、firstNLines関数からの戻り値をputStr関数を使って、
 標準出力に出力して、終了となる。

 ちなみに、putStr は、 print でダメなんかい?とおもって実行したら、

 "hoge0\nhoge1\n"

 と表示された。