Haskellの基礎(1) 関数とリスト
2.2 mainアクションと関数適用
関数とアクションの概念がすっきりと理解出来ないなぁ。
アクションについては後ほど解説があるそうだけどちょっと気になるので調べてみた。
このように入出力の動作を表す値をアクション(action)と呼ぶ。
http://ja.wikipedia.org/wiki/Haskell
ということで、現時点での自分の理解はこんな感じ。
関数は引数を受け取って計算して結果を返すモノだ。
だけど入出力はそうじゃない。計算だけじゃなくって、入出力動作が必要になる。
なので、入出力動作は、関数じゃない。これをアクションと呼ぶ。
このアクション、変数に束縛することが出来る。
変数mainに束縛された関数が最初に実行される。
あと、関数の適用。この言葉の使い方は慣れないと。
私のような関数型言語初心者には
関数に引数を適用する。
と考えてしまいがちだけど(手続き指向だねぇ)、正しくは
引数に関数を適用する。
が正しいようだ。
2.3 入出力の基本
アクションについて
ちょっと思ったこと。
アクションには引数がないのかな?ってこと。
たとえば、getContentsには引数がない。標準入力からデータを読み込むという機能から察するとなくて当然だよね。
それと、putStr cs。これはアクションではなく、アクションを返す関数。putStrには引数がある。
putStr csは、putStrが「引数csを標準出力に出力する」アクションを返すという意味がある。
「何かを標準出力に出力する」抽象的なアクションを引数を使って具体化する役割がputStr関数にはあるんだね。
putStr関数が返すアクションにはもちろん引数は要らない。
関数とアクション。何となくつながってきたぞ。
束縛について
前の節で使っていた「=」と絡めて誤解してたみたい。
「=」は束縛じゃなくって定義。
この節で説明があった「<-」が束縛。
でもこの「<-」はdo式内でしか使えないなどいろいろ制約があるようだ。
遅延評価について
う〜ん、分かったようで分からない。なんでEnterを押す度に出力されるんだろう?