ソースコードに全角記号を使う
プロデル言語では、文字列定数以外の場所で、記号に全角文字を使うことを許容しています。プログラムのほとんどで日本語文字(漢字,ひらがな,カタカナ)を使ってプログラムを記述し、IMEをオンにする状態が多く、全角文字で入れられる方が都合が良いためです。
今回は、プロデルとは直接関係がない話ですが、プロデル言語で使われるマイナスと丸の記号の話をしようと思います。
マイナス記号
プロデル言語では他の言語と同様に負の数を表す「マイナス」記号を使います。マイナスは全角文字も半角文字と同様に扱われます。例えば-10と書いても-10と書いても同じ値を表します。
Unicodeには、ハイフンマイナスやダッシュ、長音記号など、マイナスに見た目が似た記号がたくさん定義されています。最近まで私自身知りませんでしたが、日本語キーボードで入力できるマイナス記号は、実際はハイフンマイナス(--)と呼ばれるもので、Unicodeでは「マイナス」(−)を意味する記号は別に用意されています。
また、ダッシュについては半角文字と全角文字がそれぞれ用意されており、さらに罫線を表す文字も含めて、見た目が同じ記号を4種類ぐらいは挙げることができます。
プロデル言語では、ハイフンダッシュ(--),マイナス(−),ダッシュ(–—)を「マイナス」と扱い、長音「ー」(記号)や「─」(罫線)はマイナスとしては見なさないことにしました。
##真(true)を表す○
同じような問題が「まる」○でも起こります。プロデル言語には真偽を表す記号として○と×があります。当初、プロデルでの真偽値の表記には、「真」と「偽」だけを用意していましたが、より身近な記号である「○」と「×」も後から対応することにしました。
ところがその後、掲示板で「〇」が真として扱われないというご指摘を頂きました。よく見ると「○」ではなくて「〇」です(違いが分かりますでしょうか...)。
試しにIMEで「まる」と入れて変換すると、確かに○以外にも、それらしい記号が沢山表示されます。よく調べてみると、掲示板にあった「〇」は、漢数字のゼロを表す文字であると分かりました。IMEで変換候補の記号の名前が表示されますが、気が付かずに選んでしまうケースもあるかと思います。
言語仕様を決めるに当たり、見た目が同じ記号について、どの記号,文字を有効と認めるかが問題になってきます。記号の意味の厳密さを取るか、入力時の利便性を取るかのどちらかの基準で決めないといけません。
結局、「まる」については○(記号)と〇(漢数字)をどちらも認めることにしました。
理由としては、プロデルが日本語プログラミング言語であるという特徴からPCに扱いに慣れない方が使うことも想定しているので、入れ間違いはある程度許容したいため、また、元々言語仕様で漢数字をリテラルの数字として認識せず、ゼロと意味が重ならなかったためです。
逆に言えば、漢数字をリテラルの数字として認めてしまうと、〇(漢数字のゼロ)が数値の0と同じ値なので、偽(false=0)を表すことになり、見た目が類似する記号が全く逆の意味を表してしまい、深刻な問題になる可能性がありました。(数字をわざわざ漢数字で入れることは考えにくいので漢数字は無視しても困らないでしょう...)
##まとめ
今回は、見た目が酷似するマイナスと丸の全角文字をプロデル言語ではどのように扱っているかの話でした。こういった記号の違いが問題になるのは日本語プログラミング言語特有な話であり、多くのプログラミング言語では問題にすらならならないのではないかと思います...
ただ、マイナスについては日本語プログラミング言語に限らず、ソースコードにUnicodeをサポートする処理系では問題になることと思います。調査はしていませんが、プログラミング言語によって扱いに違いがありそうです。言語処理系を作る方は、調べてみると面白いかも知れません。
Qiitaに書くには場違いな気がしますが、折角の機会ですので書いてみました。