果たして、日本語は、曖昧なのでしょうか?
特殊変数「それ」の説明において、ひまわりでは、「それ」という指示語を使うことで、プログラム言語を少し日本語っぽく見せかけることが出来ると、書きました。
私は、『日本語は曖昧ではない』と、思うのですが・・・しかし、この答えは、日本語研究の専門家にゆずるとして、この章では、ひまわりの曖昧さについて、語ろうと思います。
・「言え」と、「言う」は、同じか?
このマニュアルの冒頭で、
が、
「こんにちは」と、言う。
や
「こんにちは」と、言ってみよう。
と、書いても、同じように実行されると、書きました。
「こんにちは」と、言え。
果たして、この3つは、同じとみなしても良いものでしょうか?
当初、私(作者)は、これを、違うものとして扱うように設計しました。日本語の微妙なニュアンスを表現できるものにしたかったのです。
しかし、プログラムというのは、仕事を効率的にこなすために、実用的でなければ、なりません。以下の2つの文を比べてみてください。全く同じ意味なのですが、送り仮名が、命令名と少し違うだけですが、以前のバージョンのひまわりでは、エラーが表示されてしまいました。正しい単語を記述しているつもりでも、送り仮名が少し違うだけでエラーが表示されるというのは、非常に気分が悪いものですし、何より、面倒です。
読込ファイル選択 読み込みファイル選択。
そこで、日本語の微妙さを諦めても、効率よく日本語が記述出来るようにと、送り仮名を曖昧に書いてもよいことにしました。
・送り仮名の定義
但し、送り仮名の定義は、「漢字やカタカナの後ろに続くひらがな」というものですから、「言うな」と、書いても、「言う」と同じように実行されてしまいます。
この例ように、ひまわりでは、送り仮名をひらがなで書くことにより、わざと、分かりにくいプログラムも書けてしまいます。しかし、分かりにくいプログラムを書いても、良いことはありません。分かりやすいプログラムを書くように心がけましょう!
(※ver.1.10〜1.12の実装当初は、変数やラベルにも、送り仮名の自由化がなされていましたが、間違いや誤りなど不具合が多かったので、ver.1.13よりひまわりの命令形だけに限定されました。)
・チェックは本当に必要か?
ひまわりでは、命令を実行する前に、命令に与えられた引数の、助詞をチェックします。
なぜ、助詞をチェックするのかと言えば・・・ひまわりが、プログラムを書いた人の意図と異なった動作をするのを、防ぐためです。
例えば、「Aから、Bへ、ファイルコピー」という、ひまわりの命令を見てみましょう。これは、ファイルAを、ファイルBに、コピーするという命令です。
もし、プログラムを書いた人が、誤って、AとBを逆に書いてしまったら、コピー元の、Aというファイルは、壊れてしまいますよね?
そうした、簡単な記述ミスを、防ぐために、ひまわりでは、命令の実行前に、引数の助詞をチェックするのです。
・ひまわりの助詞曖昧チェック機構
ところが!!!ひまわりの、一番ポピュラーな命令「?と、言う」を、考えてください。
この命令は、と、上の2つの文のどちらを書いても、問題なく実行されるようになっています。
「あいうえお」と、言う。
「あいうえお」を、言う。
これは、明らかに同じ内容の文章です。そこで、ひまわりでは、助詞について、言い換えをしても問題がないだろう以下のような助詞の変換機構を設けました。
助詞 言い換え可能 と を を と へ に に へ の を
・引数+命令/命令(引数)
それから、日本語というのは、助詞が存在するおかげで、多少語順を入れ替えても、意味が通じるという便利な性質があります。
例えば、「今日、私は、水色の傘を持って、学校から、自宅まで、行きました。」という文の語順を変えてみます。
「私は、今日、自宅まで、水色の傘を持って、学校から、行きました。」や、
「私は、行きました。今日、学校から、自宅まで水色の傘を持って。」などなど。
多少意味合いが違ってきますが、根本的に、同じことを述べています。
さすがに、正確さを要求されてるプログラム言語において、こうした、語順のデタラメな入れ替えは、不必要に、プログラムを読みにくくします。
そこで、ひまわりでは、命令によって定められた単語の並び順「引数+助詞、引数+助詞・・・命令。」と、それを、倒置法のように使った、「命令(引数+助詞、引数+助詞・・・)。」の、2つの語順を使えるように設計しました。
また、「命令(引数、引数)」の倒置的用法では、引数の助詞を省略することが出来ます。
実際に使ってみましょう。
以下の2つの例は、それぞれ、同じ意味になります。 「こんにちは」と、言う。 言う(「こんにちは」)。 「カレシっているの?」と、尋ねる。 尋ねる(「カレシっているの?」)。
もし、引数を省略したり、指定よりも1つ少なく書いて命令を呼び出すと、一番初めの引数に、『それ』が、渡されます。
例えば、表示は、『?を、表示』のように、使いますが、
のように書くと、『「こんにちは」と、表示。』と、書いたのと全く同じ意味になります。
それは、「こんにちは。」
表示。
また、『?から、?文字、左端を切り取る。』のように、2つ以上の引数をとる命令の場合は、
の、ように、1つ目の引数に、それが渡され、「123456789」のうちの、左から3文字切り取った値の、「123」が、表示されます。
それは、「123456789」
3文字、左端を切り取る。
それを、表示。’『123』と、表示される