Hello! Worldを復習。

久しぶりにエントリ。
金曜の夜から日曜の夜まで、訳あってMacBookの前に座ることが出来なかった。
LivedoorReaderの未読件数がえらいことに、そしてHaskellの本を何処まで読んだか忘れてしまった。しかし、大して読み進めていなかったので、最初から読み始めて中断地点らしきところまであっという間に追いついてしまった。
この休みの間に観覧車に乗った。実は観覧車が大嫌い。久しぶり乗ったら意外と平気かも、と淡い期待を抱いて乗ったが、やはりダメだ。何がダメって地面が揺れるのがダメ、ジリジリと恐怖が続くのがダメ。
恐怖を捨て去って、Haskellの勉強を進める。
前回のエントリで

main = putStrLn "Hello, World!"

書いた処理、何てことはないけど、本に何だか難しことが書いてあるのでメモメモ。
まずはmain。
これは=以降の関数を格納しているのではなく、アクション(action)というものらしい。
アクションは格納された値を評価すると、入出力などが実行されるとのこと。
そしてHaskellのプログラムを開始するとmainアクションの評価が始まって、終わるとプログラムも終了するらしい。
他の言語にあるメインメソッドみたいなものか。ということは、

ain = putStrLn "Hello, World!"

としてコンパイル、実行するとどうなるのか。

The main function `main' is not defined in module `Main'
When checking the type of the main function `main'

怒られた。
mainはこれで良し。難しいこと終わり。
続いてputStrLn。
これは文字列を1つ受け取って改行と共に出力する関数。ここでの注意点は引数をカッコで囲む必要がないとのこと。必要がないということはあってもいいということか?

main = putStrLn("Hello, World!")

としてコンパイル、実行。

Hello, World!

カッコが無い状態と同じ結果が得られた。カッコがないと不安だけど、いらないのなら打たないのがものぐさ男の心意気。無しで行こう。
最後に文字列。""(ダブルコーテーション)で囲む。そして?nで改行、至って普通。
シングルコーテーションではどうなのか?

main = putStrLn 'Hello, World!'

コンパイルして、実行。

exical error in string/character literal at character 'e'

怒られた。Rubyのノリで行ってはダメだ。


ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門