文のなかみ——式と、値

よみもの+手を動かす時間:およそ30分

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助詞いう合図
構造の木
  • プログラム
    • いう
      • たし算 +
        • 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つの式が、それぞれどんな木になるか予想してください。「どの計算がいちばん根に近いか(あとに評価されるか)」だけ言えれば十分です。予想してから、下のエディタに打って確かめてください。

  1. 5 × 5 + 1 と いう
  2. 5 × (5 + 1) と いう
  3. 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 です。

あなたの予想がこれと違っても正解です。予想と木を見比べて「どこが違ったか」を言えたとき、あなたはコンピュータの読み方をひとつ学んだことになるからです。

このレッスンで分かったこと

  • 文は「こと(起きること)」、式は「もの(評価されてになるもの)」
  • コンピュータは文をまず粒(トークン)に分け、それをに組み立ててから評価する
  • ×が+より先なのは、木の深いところから評価されるから。かっこは木の形を変える道具
  • 同じ + でも、値の**種類(型)**がちがえば意味が変わる——数なら足し算、文字列ならつなげる

これまで毎日書いてきた一行一行の下に、ずっと木が立っていました。一度見えたものは、もう見えなくなりません。