MLでは、プログラムは式として表現され、その値を計算することがプログラムの実行に相当します。…なんていうと難しく聞こえますが、要するにさっきの123 + 456みたいな式がプログラムで、それを実行して579という値を計算したわけです。このように式を計算して値を求めることを評価と呼び、「式123 + 456を評価すると値579が得られる」などと言います。
MLはただの電卓ではなくプログラミング言語なので、もっと複雑な処理もできますが、とりあえず簡単な式と値から紹介していきます。まず「123」「456」「-789」のような整数と、足し算、引き算、掛け算、割り算、余りなどの整数演算があります。
# 1 + 2 ;;
- : int = 3
# 3 - 4 ;;
- : int = -1
# 5 * -6 ;;
- : int = -30
# 7 / 3 ;;
- : int = 2
# 8 mod 3 ;;
- : int = 2
値の他に「- : int = 」という出力も表示されますが、とりあえず関係がないので無視してください。
もちろん、これらの式を組み合わせることもできます。括弧をつけることもできますし、もし括弧をつけなければ「掛け算や割り算は、足し算や引き算より先」という普通の順番になります。このような計算の順番のことを優先順位といい、「*は+より優先順位が高い」等の言い方をします。
# 1 + 2 * 3 - 4 ;;
- : int = 3
# (1 + 2) * (3 - 4) ;;
- : int = -3
式は複数行にまたがって書くこともできます。一行でも複数行になっても、値は変わりません。
# (1 + 2) *
(3 - 4) ;;
- : int = -3
ただし、変なところに改行を入れると意味がわかりにくくなることもあります。
# 1 + 2 *
3 - 4 ;;
- : int = 3
ちなみに行末に入力する;;は、式の評価を開始する合図であり、式の一部ではありません。
問題: 次の式を評価したら、値はいくつになるでしょうか。
1.
3
+ 7
2.
1
mod 2 + 3 * 4 / 5
3.
1
mod (2 + 3 * (4 / 5))
4.
-3
- -7
解答: 順番に10, 3, 1, 4