萌え指向プログラミング言語「萌香」

経由で 萌え指向プログラミング言語「萌香」

上記サイトからのプログラム例:

「なっち を
    「(n)
    「もし (n 0 =) ならば 0
        「もし (n 1 =) ならば 1
            「((n 1 -) なっち) と ((n 2 -) なっち) を たす」」」
        仕事」 と 定義 します」

「(10 なっち) を 表示」

ぱっと見て印象が強いのは日本語である、という部分ですが、中身は関数型言語です。ただし、逆ポーランド記法というか、Lisp と比べリストの先頭がお尻に移動。

日本語では動詞が後ろに来るほうが自然ですので、この順番は日本語化する際の大きな一歩です。が、car と cdr で取れる順番が入れ替わったわけではないため、リストを評価する際には、適用する関数を特定するためにリストの一番後ろまでたどっていかないといけません……。

MIND みたいに、FORTH 的なスタックマシンとして割り切ってしまって、後ろに関数シンボルが来ることを正当化したほうが、形としては綺麗になったかもしれませんね。

ところで、日本語のプログラミング言語といえば、古くは日本語ベーシックや先ほどでた MIND なんかがありましたし、最近では言霊なんていうのもあります。ただ、どれにせよ、いまいち日本語だからといって分かりやすくなった気がしないのはなぜでしょうか。

ソースを眺めていてひとつ思ったことは、ぶつ切り感。萌香でも、助詞の「てにをは」などは構文解析上無視するようになっていますが、単語の間にはスペースが必要のようです。このスペースが違和感を強めている気がします。だからといって、スペースを詰めても、どこが単語区切りか分からなくなって、かえって混乱しそうですね。ここら辺がスペース区切りを常とする英語圏の手法を、単語毎に自明に分割されない日本語に持ってこようとしたときの限界なのかもしれません。

……スペースで区切るのが間違いなわけで、仮に識別子には漢字かカタカナしか使用できないと限定し、ひらがなは全てスペースとして扱うとしたら、ひらがなで区切られた自然な日本語プログラムが書けたりしますか?日本人的には、ひらがな区切りは認識しやすいかも。

と思ったら

MIND はまさにひらがなを全て無視する仕様だった模様。その割には、スペース区切りは必要みたいなんですけどね……。