プログラミングの基礎-2

変数

# let 変数名 =;;

変数が必要になる時というのは、ある同じデータが複数必要な時。
例えば、1ヶ月のバイト代を計算してみると

(* 時給950円で週3回(5時間、4時間、8時間)働いた月の給料 *)
# ((950 * 5) + (950 * 4) + (950 * 8)) * 4 ;;

という様に計算することが出来る。。。が、
昇給で時給が1,000円になったら

# ((1000 * 5) + (1000 * 4) + (1000 * 8)) * 4 ;;

のように、「950」を全て「1000」に直す必要がある。
※(* *)内はコメント


こうゆう時は

# ((wages * 5) + (wages * 4) + (wages * 8)) * 4 ;;

という様に、時給を意味するものを変数としておくと、

# let wages = 950 ;;
# ((wages * 5) + (wages * 4) + (wages * 8)) * 4 ;;
- : int = 64600

# (* 1000円に昇給した! *)
# let wages = 1000 ;;
# ((wages * 5) + (wages * 4) + (wages * 8)) * 4 ;;
- : int = 68000

時給を表す変数を書き換えるだけで良くなる。

と、これだと、定数を定義してるのと変わらないけれども。。

関数型言語での変数は基本、書き換えることが出来ない「らしい」。
1回定義したら、そのまま。

上の例で「wages = 950」を「wages = 1000」に変えているけれども
これは、プログラムの実行中に値を変更しているのではなく
「wages = 1000」として新しいプログラムが作られている「らしい」。

関数型言語では、変数の書き換えを基本的に禁止することで
プログラムの信頼性を上げることが可能「らしい」。

今一、分かりきれてないけれど、読み進めていけば意味を理解できる様なので
このまま進んでいきましょう。

関数

若干、この章はじっくりやった方が良い予感はするのだけれども
指が止まらないので、進めることに。


共通のデータを変数としてまとめることが出来るのは分かりました。

# ((wages * 5) + (wages * 4) + (wages * 8)) * 4 ;;

よく見ると

(wages * 働いた時間)

という部分が、3回も連続している。

つまりは、1日分の給料を計算している箇所が複数あるということなので
この部分を「関数」として特定の作業をしてくれる機能にまとめてみる。

関数の定義

#let 関数名 引数 ...  =;;

引数というのは、関数が仕事をする上での材料みたいなもので
上の式では、働いた時間を引数に出来そうです。

# let calcWages x = wages * x ;;   (* 関数calcWagesの定義 *)
val f : int -> int = <fun>

# (f 5 + f 4 + f 8) * 4 ;;
- : int = 68000

引数が複数必要な時は

# let func x y = x + y ;;
val func : int -> int -> int = <fun>
# func 3 4 ;;
- : int = 7

のようになります。
(続く)