宿題の認知科学

ポーランドか! 10歳児

「+ - 18 10 5」という数式の意味、わかりますか?
 本日も取り出しましたるは10歳児(当時小4)の算数プリント。ちょっ、「箱」の字~っ!ってインパクトが強烈すぎて目が釘付けになりそうですが、今日のツッコミどころはあえてそこではありません。

 エンピツでぐちゃぐちゃと消してる部分に書かれていた「×24」に注目してください。すぐに気づいて、かろうじて正しく修正してくれています、「2×4」と(ホッ)。しかし、オカンは見逃さなかった。最初たしかに「×24」って書いたんだよ、10歳児!

 それにしても「2×4」のことを「×24」って一体なんやねん!って思いましたが、実はこういう記法も実在するのだと知りました。普通私たちが習う数式では、対象であるふたつの数字の真ん中に演算記号を書くのが常識ですが、もしこれをここでの例のように、いちばん最初に書いたらどうなるでしょう。読み下したらこんなかんじ?

+ 2 4  ← 足すぞ、2と4を(2+4のこと。答えは6)
× 2 4  ← かけるぞ、2と4を(2×4のこと。答えは8)
- 2 4  ← 引くぞ、2から4を(2-4のこと。答えは-2)
÷ 2 4  ← 割るぞ、2を4で(2÷4のこと。答えは0.5)

 じゃじゃ~ん、これをポーランド記法というそうです。ただしポーランドの算数ではこう書く、という意味ではなく、考案した研究者がポーランド人(ヤン・ウカシェヴィチ博士)であることにちなんでいるとのこと。

 さて、この「演算記号を先に」という方法で書くことに何か利点があるのか、という話ですが、第1回連載でご紹介したこの問題(18-10+5の答えと、迷子になった選手の愛犬の謎)を思い出してみてください。 

 18-10+5というような、3つの数字を操作する場合を考えてみましょう。間にあるふたつの演算記号のひとつめが引き算の場合、どのペアを先に計算するのかで答えが違ってしまうことをこの第1回連載では示しました。

 (18 - 10) + 5 =13 
18 - (10 + 5) = 3 

 「左から先にやるって習ったもん!」 というのはあくまで便宜上定められた世間のルール。「真実は常に一つ!」と言いたければカッコを用いるしかないのです。

 しかし演算記号を先に書いちゃうこのポーランド記法では、カッコを使うことなくこのふたとおりの計算の構造を表すことができるのです!

 (18 - 10) + 5 =13 → + - 18 10 5
18 - (10 + 5) =3  → - 18 + 10 5

 つまり「+ - 18 10 5」とは、足すぞ、「引くぞ、18から10したやつ(=8)」と5を!(つまり(18 - 10) + 5 =13)という意味にしかならなくて、そして「- 18 + 10 5」は、引くぞ、18から「足すぞ、10と5したやつ(=15)」を!(つまり18 - (10 + 5) = 3)という意味にしかならないことが保証されます。

 こんなふうに、カッコを使った我々がおなじみの数式と並べてみると、その左側のカッコの位置と、このポーランド記法で表した場合の演算記号の位置が揃っているのが意味ありげでいいかんじ(太字にしたところ)。ポーランド記法においては、演算記号の位置という情報がカッコの役割を担ってくれてるというわけです。

((18 - 10) + 5)         (18 - (10 + 5))
+ - 18 10 5              - 18 + 10 5

 ただ、私たちの直感としては使い勝手が悪そう……。「足すぞ、『引くぞ、18から10したやつ』と5を」とか「引くぞ、18から『足すぞ、10 と5したやつ』を」って読み下してもまともな日本語にならないですよね。

 まあそれを言うなら (18 - 10) + 5 とか 18 - (10 + 5) だって読み下せそうにないけど。普通に表現できないのかな。日本語でちゃんとこんなふうに言えるのに。

(18 - 10) + 5 :「18から10引いて、5と足します」
18 - (10 + 5) :「18から、10と5足したのを引きます」

 なんと、実は下のように、ポーランド記法で演算記号を最初に記すかわりに対象物の後に記してあげれば、日本語で読み下した語順そのままに、ちゃんと「日本語で言えるやん」になるのです!

2  4  +       ← 2と4を足します(2+4のこと。答えは6)
2  4  ×       ← 2と4をかけます(2×4のこと。答えは8)
2  4  -      ← 2から4を引きます(2-4のこと。答えは-2)
2  4  ÷      ← 2を4で割ります(2÷4のこと。答えは0.5)
18 10 – 5 +     ←18から10引いて、5と足します
18 10 5 + -     ←18から、10と5足したのを引きます

 ね、日本語の語順と一致しているでしょう? この記法はズバリ「逆ポーランド記法」という、れっきとして存在する記法です。我々にとって馴染みのあるカッコつきの数式と並べると、今度は右側のカッコの位置と逆ポーランド記法の演算記号の位置が揃ってきます。ここでも、演算記号の位置という情報がカッコの役割を担ってくれていることがわかりますね。

((18 - 10) + 5)         (18 - (10 + 5))
18  10  –  5  +           18  10  5  +  -

 逆ポーランド記法をもしも使いこなすことができたら、我々日本語話者にとって、数式とコトバがより近いものになりそうです。また、カッコを導入しないと解が決まらない、あるいは「左から順にやれ」「かけ算割り算が足し算引き算より先にやれ」みたいな追加ルールを使わなくてもきちんと答えがでてくれるなら便利ではありませんか。

 振り返って考えると、演算記号を先にいう(逆じゃないほうの)ポーランド記法は、目的語より動詞を先に言う欧米語などのほうにフィットするんですね。試しに英語で読み下してみましょう。

+ 2 4 ← add 2 and 4
× 2 4 ← multiply 2 and 4
÷ 2 4 ← divide 2 by 4
(英語に関して言えば引き算だけ数字の順が変わってしまうけど)

 というわけで、ポーランド記法も逆ポーランド記法も、人間の言語一般と意外に共通点があるといえるかもしれません。

 ただ弱点としては……演算操作の対象となる数字の切れ目をどうやってハッキリさせるかという新たな曖昧性がっ!

+ 2 4 3 ← 足すぞ、24と3を 
+ 2 4 3 ← 足すぞ、2と43を 
(どっちやねん!)

 対応策としては「数字と数字の間に切れ目の印をつけること」とか「手書きの場合は何センチ空けること」とか結局面倒くさいことになってしまうのでしょうかねえ。小学生には無理かもなあ。

 なおこの手の曖昧性ですが、逆ポーランド記法と同じ順序である日本語でこのような例にあてはまります。

「一郎が太郎と花子が次郎を侮辱したと訴えた」
(二通りの解釈を下に示す。図は、逆ポーランド記法っぽく描いてみたものです)

解釈その1
 一郎が[太郎と花子が次郎を侮辱した]と訴えた 
(太郎と花子が一緒になって次郎を侮辱したことについて、一郎が訴えた)


解釈その2
 一郎が太郎と[花子が次郎を侮辱した]と訴えた
(花子が次郎を侮辱した。それを一郎と太郎が一緒に訴えた)

 そして、数式と違って言語の場合、私たち人間は文脈や語の意味、ひいては世界常識なども解釈のヒントにしています。なので、単独では無味乾燥な数字や名前の連続のかわりに「タカアンドトシ」「ぺことりゅうちぇる」「いくよとくるよ」「やすしときよし」「エンタツアチャコ」(ああ、だんだん「あんた何歳?」感が……)など、要するに「常識としてこれはペア」であるような要素を使うとこの曖昧性が軽減する場合も。

「一郎がタカとトシが次郎を侮辱したと訴えた」 (たぶん解釈その1にバイアス)
「タカがトシと花子が次郎を侮辱したと訴えた」 (たぶん解釈その2にバイアス)

(タカアンドトシさん、身に覚えもない設定に勝手に登場させてごめんなさい)

 さて、冒頭のプリントに戻りますが、なぜこの10歳児、「2 × 4」のかわりに一瞬「×24」が浮かんだのか。正直わかりません。

 頭の中で日本語で「2と4をかけて……」がそのまま表出したのであれば逆ポーランド記法の「24×」が出てくるところなのかもしれません。英語話者でもないのに、なぜわざわざ日本語と逆の語順であるポーランド記法「×24」が……? 

 ここでさっきのタカアンドトシが一言、 「欧米か!」 (ちゃんちゃん)