ghci でインタプリタが起動.「:quit」または「:q」または「CTRL + D」(同時押し)で終了
ghci
元の「式」から「値」を得ることを評価という. 式と値の詳しい説明は後で触れることにしよう. 式から得られた値のことを,その式の評価結果という
四則演算: +, -, *, /
2 * 3 10 + 20 3 / 5 1 / 3 10 - 20
べき乗: ^
2 ^ 10
かっこの内側が先に評価される(評価の優先順位)
:{
1.05 * (10 + 20 + 30)
複数の式を一般化して,「ラムダ 仮引数の並び 関数の本体式」の形で表現したものを関数抽象という (ラムダ抽象ともいう).
関数には引数と帰り値の間に関数関係がある.
関数適用では,関数抽象の仮引数を,実際の値に束縛し,関数の本体式の評価結果を得ていることになる.
下の例では,関数「(\ x -> x * 1.05)」に値 100, 値 200, 式 (100 + 200 + 300) を適用している.
1.05 * 100 1.05 * 200 1.05 * (100 + 200 + 300) (\ x -> x * 1.05) 100 (\ x -> x * 1.05) 200 (\ x -> x * 1.05) (100 + 200 + 300)
変数を,値に束縛することができる.このとき変数に値が結びついていることに注意. 束縛された変数が,変数名を使って参照される.
let を用いた例を以下に示す.
let foo = 100 let ans = True let name = "kaneko"
特記事項:関数も値 値の型はいろいろ
let foo n = 2 ^ n foo 10 foo 12
数値に関する関数の例:
要素の並びをひとまとまりにしたもの.
リストに関する関数の例: length (リストの要素数), take (リストの先頭から任意個数の要素の取得.結果はリスト), reverse (リストの逆転.結果はリスト), head (リストの先頭要素), tail (リストの第二要素以降.結果はリスト),
take, head, tail での実行時エラーについては、あとで考えることにしよう.
print による画面表示
readLn によるデータ入力
ghci では,複数行に分けたい場合には :{ と :} で囲む
:{ let kaijou 0 = 1 kaijou n = n * kaijou (n - 1) :} kaijou 5