haskellの概要や用語の説明をまとめておく
ソースコード
iHaskellで試している
Haskell入門
ウォークスルー Haskell
ウォークスルー Haskell - Haskell 入門をiHaskellでやってみた
.ipynb
https://github.com/uni-3/haskells
用語
気になった語をまとめておく
純粋関数型言語
関数でプログラムを構成する言語を指す
関数とは数学で使う関数と同じで 同じ引数に対して同じ値を返すもののことをいう
のような関数のことを言う
このように同じ値を渡したとき、必ず同じ結果が返ってくる性質を参照透過性といったりする。関数が状態を持たないことを保証している
いわゆる変数への副作用がない関数のことを参照透過性を持つというのだろうか
それらを組み合わせた式で構成されるプログラムのことを純粋関数型プログラミングと言ったりする
haskellではこのような書き方が推奨されている
純粋性
純粋とはすべての変数はイミュータブル(変更不能)であること
I/O(入出力)を使用したいときはIOモナドと呼ばれる仕組みを使う必要がある。特にI/Oは副作用を伴う場合が多いので、純粋性を保つために使われるらしい
遅延評価
haskellにおいて式は遅延評価される
他のプログラミング言語(手続き型言語と言ったりする)では関数は呼び出されたときに実行される
haskellでは必要になるまで実行されない
f(1/x)
haskellでは1/xは計算されずに、fに渡される。実際に引数が使われるタイミングで計算される。これを遅延評価という
メリットとしては、使われない式は評価されなくなるなどがある
デメリットとしては、評価の順番が予測しづらいこと、
g(f)
g->f
I/Oアクション
haskellのような関数型言語は式(関数)を組み合わせてプログラムを記述していく
値を渡して評価するのみだと、何がしかの処理を出力するなど、I/O部分の相互作用はできない そこで
- ファイルの読み書き
- 標準入出力
- HTTP通信
- 現在時刻の取得
などをおこなう式、I/Oアクションと呼ばれる式を用いる
例えばputStrLnは値を返さない(Unit型が返り値)。値を返さずに、画面に文字列を表示するという副作用(side-effect)を引き起こしている。
式の評価以外の何かを起こす式をI/Oアクションという