プログラミングの基礎-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
のようになります。
(続く)