値と評価
大前提
式は評価されて初めて値となります。
code:例
1 + 3
4
4
4
x //xには4が入っているものとする
4
x + 3
7
これは式を与えるとその式の値を返すループ(REPL)です。式の値を返すときに評価という操作を行っています。
1つ目の例で言えば1+3という式は評価されて初めて4という値に変化します。1+3を評価せずにそのまま返すと「1+3という式」という値が返ってくるはずです。
2つ目の例は数の値です。値はそれ以上評価して簡単な形に簡約することはできないので、そのままの値が返ってきます。
3つ目の例は変数です。このように変数一つだけでももちろん式としての体をなします。変数が評価されると、その保持している値が式の値として返ってきます。したがって、変数に4が入っていると4が返ってくるわけです。
4つ目の例は変数の入った式です。これは何段階かの評価に分割することができます。(スモールステップ意味論)
code:x + 3の評価
x + 3
(=>) 4 + 3
(=>) 4 + 3
(=>) 7
まず、x+3の左辺のxが評価されます。xには4が入っていますから、xをその値4に置き換えた式4+3を返します。
次に、+の右辺3を評価します。3はそれ以上評価できないので、そのままの値を返します。
最後に、+の左右両方の式を評価しきったので式全体を評価します。その結果として7が返ってきています。
このように、式はそれ以上評価できなくなるまで評価されて、その最後の値として振る舞います。
C言語においても、それは同様で、代入文の右辺であったり、関数の引数の中で評価は行われています。
code:example.c
int main(void) {
int x = 4;
int y = x + 3; // => x + 3は評価されて7という値になっている。
printf("%d\n", y); //=> yは評価されて7という値になっている。
return 0;
}