Scribble at 2022-07-23 11:54:52 Last modified: 2022-07-25 07:42:39

ただいま RPN の〈まともな〉ページを用意しているところだ。RPN というのは "Reverse Polish Notation"(逆ポーランド記法)という演算表記のことで、ポーランドのヤン・ウカシェヴィチという論理学者が考案したことで知られるようになった。いまでも RPN で入力する方式の電卓を愛好する人がいて、RPN で計算する電卓のスマートフォン・アプリケーションもある。また、個人で RPN の電卓を工作している人もいる。

記法の例を挙げると、僕らは学校で加法つまり足し算を表記する際に「3 + 2」と書くことを教わる。これを、RPN では「3 2 +」と表記する。実はこれだけで説明は殆ど終わってしまう。

しばしば「日本語の文法に近い」などと書いている人がいるようだが、それは RPN での計算を「3と2を足すと・・・」と読めるという、はっきり言って詰まらない事実に訴えているだけであり、聞く耳をもつ必要はない。そんなこと知っているだけでは、何の実績も積み上げられないからだ。言語学としての業績すら、まともなものは何も出てこない。こんな些事を得意げにブログ記事などに書いている者には、では「3足す2は・・・」と中置記法(infix notation)でも読める事実をどう説明するのか、そして両方の読み方が日本語として問題ないという事実があるにも関わらず、どうして一つの語順だけで「日本語と親和性が高い」などと安っぽいナショナリズムを、自覚があろうとなかろうと匂わせようとするのか。そういう、些末な事実を書いている人間の意図や動機をこそ説明させてみるとよい。同じことは英語でも、"3 plus 2 equals 5" だけでなく "adding 3 to 2 will be 5" などと複数の記法で文法に反しないまま書ける。

RPN がなんであるかという説明は確かに簡潔にできるが、だからといって、RPN という演算表記の形式的な理屈とか含意が単純で底の浅いものであるわけではない。表面的に「3 + 2」を「3 2 +」と置き換えることは「小学生にでもできる」(と書いているブログ記事もある)が、そんなことだけで RPN の効果や妥当性や表記方法としての利点・欠点などを理解できるとは限らない。それは、まさしく「3 + 2」という表記方法を学んで毎日のように使っている人々の大半が、その標準的な表記方法の効果や妥当性を形式的に理解したり説明できないという事実と全く同じことである。サルはバナナの皮を剥けるが、言語や理屈を習得しない限り、バナナの栄養成分について他のサルに説明することなど永遠にできない。

さて、こういう次第で RPN は興味深い話題ではあるが、英語のリソースも含めて殆どまともなコンテンツがない。あるとしても、せいぜい RPN で入力する方式の電卓の話が多く、そこで展開される形式的な議論は、せいぜい C 言語で RPN のパーサを開発するといった工学的な関心によるものが多い。これはこれで興味深いし楽しいページもあるのだが、そういうアプローチだけでは不十分に感じた。そこで、もう少し原理的なところで解説したり議論するページが必要だと思う。ウィキペディアの「逆ポーランド記法」というエントリーにしても、参考文献の数も含めてリソースとしては不十分だ。かといって、僕はウィキペディアのエントリーに手を加えるような意思はなく、自分のコンテンツとして公開する方が他人に手を加えられないという重大な利点もあるから、当サイトで公開する予定だ。(もちろん、他人に手を加えられてもいい事項については、ウィキペディアの編集に参加することもある。)

僕が RPN を詳しく解説するべきだと思ったのは、FORTH というプログラミング言語(RPN を採用している)を学んでいるときに、RPN の説明が意外にも多くのテキストで丁寧に書かれていないということに気づいたからだ。そもそも FORTH で RPN を採用した経緯や理由についても、あまり語られていない。FORTH は、Open Firmware の規格に準拠したブート・アップのシステムを実装するのに使われてきた(Apple, IBM, Sun などが採用)し、FreeBSD という UNIX 系列の OS では、2018年にリリースされた release 12 までは FORTH で書かれたブート・ローダを使っていた(release 12 からは Lua で書かれたブート・ローダを採用している)。それだけの実績と経緯がある以上は、このプログラミング言語で採用されている RPN という表記法を学び、習熟せざるを得ないわけであるから、RPN についての知見なり技法なり理解なりが蓄積されていると期待できる。FORTH のコードに学ぶということは、そこで実装されたアルゴリズムを学ぶだけではなく、RPN という記法でのコーディングで蓄積された知見に学ぶということでもあろう。

ということで、FORTH について正確なコーディングを学ぶには RPN の正確な理解や習熟が欠かせない。しかし、RPN についての議論はあまり表に出てこないし、RPN だけを単独で(FORTH とはかかわりなく)取り上げているリソースについても、英語で調べてすら安易な用語解説の安っぽいブログ記事が大半を占めている。そんなコピペみたいなページが何億あろうと、大袈裟に言えば人類の叡智を 1mm すら前進させる役には立たない。公にものを公表して情報なり知識を掲げるということは、たとえ大袈裟であろうと、かような目標に資するものでありたいと志すくらいの心意気がなければ、まさにチラシの裏に書いている走り書きを他人様に見せて得意になっているだけのオタクと同じである。そういう人々は、些末でも何でも他人が知らないことを単に知っている事実こそ、人を見下す拠り所であるかのような錯覚に陥る。これは、われわれ哲学者が他の何を措いても避けなくてはいけない自己欺瞞であろう。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook