このブログを検索

2015年7月16日木曜日

日本語は状況記述で済ませる事を好む

プログラミングの業界では、近年、関数型プログラミング言語が流行しているそうである。それで、何で流行しているかと言うと、従来主流の手続き型プログラミング言語よりも記述が簡潔になり、それだけプログラム開発の生産性が良いらしい。それだけでなく、並列処理の効率が良いという。

さてこれから話を日本語と英語の対比に持って行こうとしているんだけど、その前にコンピュータ言語の説明。

関数型プログラミング言語も手続き型プログラミング言語と同じ位に歴史は古い。では何で昔は流行らなかったのか。それは、実行速度が遅すぎたのだ。しかし、時代は変わってきた。CPUが十分に高速化し、またマルチコア化して来た現状では関数型プログラミング言語が遅いのは欠点で無くなり、プログラム開発の効率性とか並列処理の面での優位性が増してきたのだ。

それで、両者の違いを説明するのに、1からN(正の整数とする)までの数字を足すプログラムが良く使われているけど、
  1. 手続き型プログラミングでは、内部変数 temp にループカウント i を加えるという計算を i が N になる迄続けて最期に temp の値を返す。
  2. 関数型プログラミングでは、S(1)=1、x>1の時に S(x)=x+S(x-1) と定義して S(N) の値を返す。
というような違いがある。手続き型プログラミングでは概ねCPUの動作を模した表現なのに対して、関数型プログラミングでは、表現は簡潔(こういうやり方を再帰的定義と言う)だけどCPUが実際にどう動いているのか分からん、と言うのは私の感想。

尤も、手続き型プログラミング言語で関数型プログラミングのような記述もできるし、関数型プログラミング言語で手続き型プログラミングのような記述もできるけど、それぞれのプログラミングの型にあったプログラミング言語を選ぶのがやり易い。

さて、これを自然言語に当てはめて考えると、英語=手続き型プログラミング言語、日本語=関数型プログラミング言語、と言う気がしてならない。

日本語:「暑いですね。」と状況を説明するだけだが、英語:「窓を開けて下さい。」、若しくは「冷房して下さい。」のように具体的に要望を口にする。

このように状況記述だけで目的を達する事が出来るのは、この状況に対してはこう対応するという行動様式が社会全体で共有されているからだと思う。日本語の構造というよりは日本文化のなせる技。人種のルツボと呼ばれる米国では、英語で同等の表現をしようとも期待通りに行動して貰えまい。

しかし、日本語の特性として、状況記述がやりやすいとは思ってる。「は」と「が」の使い分け、お互いに分かっている事は省略、など簡単に出来てしまう。

つまり、同じ情報を伝えるのに日本語は口数少なくて済み、英語は沢山の言葉を費やす。

裏を返せば、日本語では一つ一つの言葉が重要になってるから聞き間違いは許されず、英語は多少誤って伝わっても情報を沢山の言葉で補うことが出来ると考えてみる。

そうすると、音声学的な特徴も理解出来る。
  1. 英語は子音の数も母音の数も日本語より多い。そうすると、同じ口数で英語は沢山の情報を送ることが出来るけど、音の違いも小さくなって区別し難くなるから誤って伝わる確率も高くなる。
  2. 英語のアクセントは強弱、日本語のアクセントは高低と言われる。通信方式でAM(強度変調)よりFM(周波数変調)の方が雑音に強いと言われているから、日本語の方が正確に伝わりやすいものと考える(強引だけど)。
  3. 日本語にはモーラという、一定の時間間隔で音素が発せられる概念がある。そうすると、例えあるタイミングで音素が聞き取れなくてもそこは不明として元の音声を推定することも可能(一種の誤り訂正)になる。
おお、日本語って凄いな。