文のなかみ——式と、値
7は、どこから来たのか
まず、実行してみてください。
1 + 2 × 3 と いう
Ctrl+Enter でも実行できます
あなたが書いたのは「1 + 2 × 3」なのに、コンピュータは「7」と言いました。書いた覚えのない 7 が、実行のどこかで生まれています。
じつは、これと同じことをあなたも毎日やっています。「3たす4個のりんごをください」と言われたら、あなたは聞いた瞬間、頭の中で「7個のりんご」に直してから動きます。コンピュータも同じで、「1 + 2 × 3」という式を、まず「7」という値に直してから、言うのです。
この「式を値に直す」働きを、評価と呼びます。コンピュータの仕事の半分は、絵を描くことでも文字を出すことでもなく、この地味な評価です。
文は「こと」、式は「もの」
ここで、これまで書いてきたことばを2つに仕分けしておきます。
「かく」「すすむ」「いう」のような文は、実行すると何かが起きます。円が現れる、線が引かれる、何かが言われる——文は「こと」の側です。
いっぽう「1 + 2 × 3」のような式は、それだけでは何も起こしません。評価されて、値という「もの」になるだけです。
文が「こと」、式が「もの」。にわ語のプログラムとは、「もの」を抱えた「こと」の並びだった、と言えます。
かけ算が先、という約束
7になったということは、コンピュータは 2 × 3 を先に計算しています。左から順番なら (1 + 2) × 3 で 9 になるはずでした。
これは算数と同じ約束です。×と÷は、+と−より先に評価される。そして算数と同じく、先にさせたい計算は、かっこで囲めば先になります。
では、この「先・あと」の順番を、コンピュータはどこに覚えているのでしょう。じつは文そのものの中に、目に見えないかたちで埋まっています。次の道具で、それを見ます。
文を、開けてみる
下の装置は、文を実行する代わりに、コンピュータが文をどう読んだかをその場で見せてくれます。
- プログラム
- 文いう
- 式たし算 +
- 数1
- 式かけ算 ×
- 数2
- 数3
- 式たし算 +
- 文いう
見るところは2つあります。
ひとつめは「ことばの粒(トークン)」。コンピュータが文を読む最初の一歩は、文を 1「数」、+「計算」、と「助詞」、いう「合図」のような粒に分けることです。にわ語が分かち書きを求めてくるのは、この粒分けを正直にやっているからでした。
ふたつめが「構造の木」。粒を組み立てると、文は一本の木になります。「いう」という文の下に「たし算」がぶら下がり、たし算の下に「1」と「かけ算」が、かけ算の下に「2」と「3」がぶら下がっている——よく見ると、かけ算のほうが、たし算より深い場所にいます。
これが「×が先」の正体です。木は深いところ(葉に近いところ)から順に評価され、値が根に向かって持ち上がっていきます。2 × 3 が先に 6 になり、それから 1 + 6 が 7 になる——順番は約束の暗記ではなく、木のかたちそのものでした。
ここで実験です。上のエディタで、式を (1 + 2) × 3 と いう に書きかえてみてください。木の形が組み変わって、今度はたし算が深い側に潜ります。
そして、かっこそのものは木のどこにも残っていません。かっこは木の部品ではなく、木の形を指定するための道具だったのです。
⟡ よりみち:逆さまの木
コンピュータ科学者の描く木は、根が上、葉が下です。由来には諸説ありますが、紙に書くとき「根から枝分かれを書き足していく」と自然に下へ伸びる、という事情が大きいようです。この構造は構文木(syntax tree)と呼ばれ、言語学者が人間の文を分析するときに描く木と、ほとんど同じものです。プログラミング言語と人間の言語は、根のところでつながっています。
値には、種類がある
評価の結果である「値」の話を、もうすこしだけ。次の3行を、結果を予想してから実行してください。
2 + 3 と いう 「2」 + 「3」 と いう 2 + 3 が 5 と おなじ と いう
Ctrl+Enter でも実行できます
1行目は 5。2行目は——23 です。かぎかっこで囲んだ 「2」 は数ではなく文字列(文字の並び)で、文字列どうしの + は、足し算ではなくつなげることを意味します。
同じ + という記号なのに、値の種類がちがうと、意味が変わる。この「値の種類」を、プログラミングの世界では型と呼びます。郵便番号の「113」を住所の一部と読むか、数と読んで114を足すかが場面で決まるように、値は種類といっしょに扱われてはじめて意味を持ちます。
3行目の答えは「ほんとう」でした。これは数でも文字列でもない、第三の種類——ほんとうかうそかの値です。「もし」が条件として受け取っていたのは、じつはこの種類の値でした。
にわ語の値は、ぜんぶで6種類です。数、文字列、ほんとうかうそか、それから色・形・ことば(手順)——あなたはもう、全種類と顔見知りだったことになります。
✎ 演習:木のかたちを、予想する
次の3つの式が、それぞれどんな木になるか予想してください。「どの計算がいちばん根に近いか(あとに評価されるか)」だけ言えれば十分です。予想してから、下のエディタに打って確かめてください。
5 × 5 + 1 と いう5 × (5 + 1) と いう10 - 3 - 2 と いう
- プログラム
- 文いう
- 式たし算 +
- 式かけ算 ×
- 数5
- 数5
- 数1
- 式かけ算 ×
- 式たし算 +
- 文いう
ヒント1(考え方)
「最後に行う計算」が根のいちばん近くに来ます。自分が手で計算するとき、どれを最後に計算するかを考えてみてください。先にやる計算ほど、深いところに潜ります。
ヒント2(3つめについて)
10 - 3 - 2 は 5 でしょうか、9 でしょうか。左から計算すれば (10−3)−2 で 5、右からなら 10−(3−2) で 9 です。木の形は、このどちらかをはっきり選んでいるはずです。
こたえ
1 は、たし算が根でかけ算が深い側(値は 26)。2 は、かっこの効果で逆転し、かけ算が根でたし算が深い側(値は 30)。3 は、ひき算の下にもうひとつひき算がぶら下がり、左側の 10 − 3 が深い——つまり左から計算されて 5 です。
あなたの予想がこれと違っても正解です。予想と木を見比べて「どこが違ったか」を言えたとき、あなたはコンピュータの読み方をひとつ学んだことになるからです。
このレッスンで分かったこと
- 文は「こと(起きること)」、式は「もの(評価されて値になるもの)」
- コンピュータは文をまず粒(トークン)に分け、それを木に組み立ててから評価する
- ×が+より先なのは、木の深いところから評価されるから。かっこは木の形を変える道具
- 同じ
+でも、値の**種類(型)**がちがえば意味が変わる——数なら足し算、文字列ならつなげる
これまで毎日書いてきた一行一行の下に、ずっと木が立っていました。一度見えたものは、もう見えなくなりません。