峡中禅窟

犀角洞の徒然
哲学、宗教、芸術...

構文とプログラミング言語...ポーランド式記法と逆ポーランド式記法

2016-09-14 01:09:34 | 哲学・思想
2年前のコメントですが...
プログラミング教育についても、この前、30年以上前からプログラミング言語の研究者である元富士通の叔父さんと話していたが、逆ポーランド記法の日本語プログラミング言語の方が、精度が高くなると言っていた。
そもそも、日本語は、漢字、ひらがな、カタカナ、アルファベットとどんな言語でも組み込める柔軟性を持っている。
日本語プログラミング言語の精度を上げれば、自然言語に近い形でプログラムすることができるだろう。

今までも『Mind』などが開発されているがもっと精度を上げることは可能だとのことだ。アラン・ケイも、Smalltalkなどで教育用のプログラミング言語に力を入れているが、日本語の構文体系で初学者のプログラミング教育ができるといっきに、ソフトウェアのレベルは上がるし、人口も増える。
新陳代謝の早い下手な言語を教えるよりも、いっそ、日本語プログラミング言語を洗練させた方が近道だという気がしている。

結局、プログラミングも言語であり、文章能力こそが大事なのであって、その基本なしに、デジタルうんぬん言っている場合ではないのだ。

*******

 これはとても面白いもですね...

「言葉」について学ぶ、という場合、たとえば「文法」のようなものを学ぶとき、私たちはまず「英語」の文法を思い浮かべます。そのとき学ぶのが、SVO、SVCといった「構文」です。
最初に英語を学んだとき、主語の次に動詞がきて、述語となっている、というルールは、とても印象的でした。

ドイツ語やフランス語もそうなのですが、主語の次に動詞がくるという構造を持つ言葉を日本語に翻訳して理解する作業をするとき、手続きとしては、まずは主語を確認して、その次に動詞をスキップして、後ろの修飾語を訳しながら、動詞の方にさかのぼって帰ってくる、という手続きをとります。これは、とても面倒な作業です。

フランス語なり、ドイツ語なりの文献を、原典で読んで行かなくてはならない場合には、そうした煩瑣なことをしていてはとても追いつきませんから、前から後ろに向かって読んでいく訓練をします。簡単に言えば、「私は、行きました、東京に、二週間前です...」といった具合ですね。
これを続けていると、いちいち日本語の文章に翻訳して、その文章を理解する、ということをしなくとも、原文の構文の順番のまま、本文を読み流していって、内容を理解できるようになります。
こうした作業になれてしまえば、何とも思わなくなるのですが、慣れるまでの間は、無意識に日本語に翻訳しようと頭が働いてしまうので、日本語を、とても面倒な文法を持つ、使いにくい言語だと感じがちです。

しかし、そうした「違和感」は、全く違う文法の構造を持つ外国語を日本語に翻訳しようとする場合の、その文法の違いに由来するものでしかありません。それは、全く違った文法構造を持つ言語の間の相違によるものであり、言語としての日本語の優劣とは、全く関係がないのです。もちろんそれは、日本語の文章を、ドイツ語なりフランス語なりに翻訳しようとする場合に感じる難しさについても、全く同じことです。

しかしながらここで、「日本語は特殊な言語だ」という先入観が強くすり込まれてしまっていると、この違和感が、単にその言語動詞の間の構造上の「相違」に由来するにすぎないのだ、ということを忘れて、「日本語は不便な言葉だ」という根拠のないイメージにつながります。
言うまでもなく、世界の言語を幅広く見れば、日本語だけが特殊ではないですし、英語やドイツ語のような文法構造の言語が、言語一般の構造から見ても、使用する人間の人口から見ても、「主流」というわけではないのです。

私たちが日本語を用いながら、日常的にも、繊細緻密で学術的な問題を考える場合においても、全く不便さを感じないということが、「日本語は論理的ではない」といった主張の誤りであることを間接的に証明していますし、そもそも、日本の数学の水準が世界的に見ても高い(これは、昔からの和算の時代から一貫しているのです!)ことも、日本語という言語が、OSとして、論理性と相容れないわけではないことの証になるかもしれません。
ちなみに、哲学の世界でも、日本人のカントやヘーゲルの研究水準は、とても高いのです。
要するに、ヨーロッパ言語の、抽象度の高い議論に対しても、日本語は、こと論理的な精密さに関しては、それほど遜色があるわけではないのです。
さらにいえば、哲学者カントは、錯綜した議論にさしかかると、自分の覚え書きのノートの中では、なんと、ラテン語でメモをとっているのです! カントの時代、ドイツ語は、まだ哲学的な議論をするには、洗練度が足らなかったのです...ライプニッツなどは、著作は基本的にフランス語で書いているのです。明治以前はともかく、今日では、日本語は、ヨーロッパ諸言語の哲学的な議論に対して、無力である、などということはありません。

要するに、どのような構文、どのような文法体系を持つにせよ、機能的に見て、その言語としての優劣を決めることは簡単ではないのです...というよりも、優劣を考えること自体が、言語というものの本質には、ふさわしくはないのです。

前振りが長くなりましたが...

さて、このクリップで「逆ポーランド記法」と言われているものが、まさにこうした問題に関わるキーワードですね。
これは「プログラミング言語」のお話ですが、たとえば5+7という数式を表現するのに、逆ポーランド記法にすれば、5 7+ ということになります。「5足す7は...」ではなく、「5に7を足すと...」という表記ですね。つまり、日本語がそうであるように、ここでは演算子つまり+、足すという命令が、日本語の文法のように、記述の後ろに来るやり方なのです。
反対に、+5 7と表記するのが、ポーランド記法です。演算子が記述される場所が、逆ポーランド記法では後ろに来るため、「後置式記法」。ポーランド記法では前に来るため、「前置式」。ついでにいえば、5+7という、私たちが学校で習う数学の記述式は、演算子つまりここでは+が、式の中央に来るため「中置式」とも呼ばれます。

面白いのは、実は、数式を記述する場合、中置式が一番複雑な記述形式になりがちなのだということです。

前置式つまりポーランド式記法は、どのような操作をするのかが、まず先頭に現れるため、数式全体の構造が見通しやすいという長所があります。
後置式、つまり逆ポーランド記法は、演算を実行するときに、5,7と、かかれた順番通りに数字をインプットして、それから行うべき操作(ここでは+)を行えばよいので、あらかじめ+を覚えておいたり、途中で出てくる+を覚えておいたりする必要がないのです。数式どおり、出てくる数字を順番に打ち込んでいけばよいですので、操作そのものがシンプルに表現できる長所があります。

もちろん、細かいことをいえば、煩瑣な議論が出てきますので、簡単にはいかないのですが、要点をいえば、動詞が最後にくる日本語の形式は、逆ポーランド記法にとても親和性がありますね。ですから、日本語の文法構造に見合ったプログラミング言語は、逆ポーランド式、ということになります。すると、逆ポーランド記法を採用する場合の論理的なメリットが日本語にある、ということになるのです。

ということは、日本語を無理矢理ポーランド式記法に置き換えてプログラミング言語を構築し、運用するよりも、日本語に相性の良い逆ポーランド記法でプログラミングを構築し、それを磨き上げていく方が、私たちの自然な日本語の用法に近い形でプログラムが記述でき、しかも、逆ポーランド式記法を採用する場合のメリットも享受できる、ということなのです。

日本語の漢字仮名交じり文と、読み仮名、ルビの採用が、音声と記号、つまり聴覚と視覚との連携という観点から見て、漫画を描く場合の操作に親和性があることが、日本における漫画文化の高度な発達の基礎にある...という指摘を、養老孟司氏がしていましたが、ここでいわれているのは、それとは別に、動詞を最後に持ってくる、あるいは述語を後ろに置く、という構造が持つメリットが、日本語にある...プログラミング言語の構造的な性格から、それが言える、という指摘なのです。

こうしたところをふまえると、まずなすべきは、日本語を徹底的に磨くこと...
そうすれば、日本語にふさわしいプログラミング言語を鍛え上げることに絶大な寄与がありますし、日本語の持つ言語的特性が、論理的にもその強みを発揮して、優れたプログラミング言語を生み出すことができる...

デジタル化云々という議論が、ややもすれば、もっぱらIT技術の導入と普及という観点からの、皮相な議論に終わりがちであることを考えれば、ここでの指摘はとても重要ですね。
日本語に基づいた、新しいプログラミング言語を構築する、という可能性を最大限にのばすことこそが、これからの私たちの志であるべきですし、その場合、なんといっても日本語の教育が重要になるのですね...

最後のところに言われているように、「結局、プログラミングも言語であり文章能力こそが大事なのであって...」ということにつきるのです。いかなるプログラミングも、目的があって初めて構築できるのですから、日本語によって創造されるものが貧弱であっては、どのような精密な日本語プログラムを設計しても、たいしたことはできないからなのです。

<script type="text/javascript">// </script>