同人創作サークル「Onoma」のメンバーが、自分の考えや思想を垂れ流すブログです。
どうも、Onomaのシステム・インティグレーターのまんじゅ(´ん`)です。
改めて「SI」という言葉を方がな表記すると胡散臭いですね。
OnomaのFacebookページにビューがあるのに、何も更新がないのはちとさみいし、Onoma自体も活動するのかしないのかようわからん。なおかつサークル長は個人ブログでの考察が捗ってるので、僕の一升瓶くらいの重たさのある腰を上げて、ここ最近プログラミング活動していくうちに思った「言語」というものについてだらだら話そうと思います。
人間はその進化と文明の発展により、言葉を生み出しました。
それにより、意思疎通を図り、そして知識の継承を容易にしてきたと昔話した気がします。
そしてときは21世紀、現代では自然的に生み出された言語ではなく、
厳密に定義された人工言語で、電子計算機に命令したりしております。
しかし、こんなことがありました。
Facebook's artificial intelligence robots shut down after they start talking to each other in their own language | TA
Facebookのチャットボット(深層学習機能付き)が、独自言語を生み出し、会話し、交渉に成立したとのこと。
ここで彼らが話題に出した話は、
後なんかひとつあった気がしますが、忘れたので多分大したことはないでしょう。
彼らはある意味では人間の話す言語を、チューリングマシンで処理しやすいように最適化したのかもしれませんね。
閑話休題。
「使う言語は言語使用者の思想に反映されるのでは」
という仮説があります。サピア=ウォーフの仮説です。
もちろん、これには批判もありますが、私はこの仮説は正しいと思います。
でなければコンピューターに命令する言語が数多に生まれ、存在してるはずがない。
各々が最適な命令言語を構築しようとしているのです。それこそFacebookのBobやAliceの様に。
さて、このサピア=ウォーフの仮説を実証してみようではないか。
ということで生まれた言語があります。ログランです。
更にそれの有用性(品詞の並びを制限しない。コンピューターと親和性が高いetc...)に気づいた人々が更にいまして、それが現在ロジバンという言語となって世界中で研磨されております。
ロジバンは詳しく話すとその独特な概念で卒倒しかねません。
なのでまずは「はじめてのロジバン」辺りを見るといいかもしれません。
と書いても誰もリンク先に行って調べようとしないのはわかっているので、どういう言語なのかテキトー(適当ではない)に言いますと、
「予め定められた文法に適当な詞をテキトーに埋めていく」
言語です。
「はて?」
と思われた方は「はじめてのロジバン」辺りを(以下省略
とは言いつつも、コンピューターに仕事の手続きを伝えるのが「プログラミング」なので、全部手続き型と言えるのかもしれませんが。
(例えば、その手続きが文章の左上から右下に逐次実行されるのではなく、それぞれの行の手続き(処理)が並列(並行)して実行される言語だってありますので。(ANI, Plaid))
大半のプログラミング言語は手続き型のため、まず最初に処理するためのデータを入れなければなりません。
(厳密に言うと、プログラミング言語を作る上でのコンピューターとの取り決めの時点で宣言・定義は必要ですが、ここではそれは無視します。)
関数型に関しても、データはあったほうがいいですが、ErlangやHaskell、Lisp(Scheme, Common Lisp, etc...)は後からデータを入力しても良い実装になっています。これを遅延評価といいます。
日本語で言うと面倒ですね、プログラマならなんでも(架空の言語でも)いいからコードで語りましょう。
f(x, y) = x + y
これを仮に関数の定義とします。
「関数fにxとyを代入したら、xとyを足した値が返ってくる」
と言う意味です。
これを踏まえた上で、次に以下のコードを実行します。
f(3, 7)
これは普通に「10」という答えが返ってきます。
ではこうなるとどうでしょう?
f(x, 4)
ここで大半の手続き型言語では「xにデータがないので関数が実行できません」
と怒られます。しかし、関数型はそこであえて関数を実行せずに、xに値が入るのを待ちます。
さあ、次のコードを実行したとしましょう。
f(3)
するとコンピューターは「さっきyに4という値を入れられたから、今来た3という値と足せばいいのか」と判断し、「7」と答えを出すでしょう。
「いやいやいやいや、そもそもだ、『=』記号がナンセンス」
と思った読者の方がいらっしゃいましたら、連鎖型言語をお試しあれ。
連鎖型言語では、
3 2 +
とかくと、
「あ、3っていう値が入ってきた。次2っていう値が入ってきた。なに? 次は『+』記号。そうか足し算か。じゃあ5の値を返すか」
とコンピューターは解釈します。これは非常に日本語に近い感覚でプログラミングできますね。
3 + 2
と書くプログラミング言語(算数、数学もですね)が多いですが、
「3に足して、2を」
という、若干倒置法めいた言い回しになりますね。ところがこれを連鎖型言語(逆ポーランド記法)で書くと
「3と2足して」
と訳せますね。
さて、ここまでで何が言いたいのかと言うと、
「私達は日常会話でも遅延評価してますよね。関数型ですよね」
という話がしたかったのです。
「前の話、覚えてる?」
「前の話って?」
「ほら、この間のトマトの話」
これ、こう言い直せますよね、
「覚えてる? 前の話」
「前の話って?」
「トマトの話」
そういうことで、サピア=ウォーフの仮説はもしかしたら正しいかもしれないので、
文章表現を豊かにしたい気持ちがあれば、諸外国語、国際共通言語(エスペラント等)、工学言語(ロジバン、各種プログラミング言語)、色々学んでみると、表現の幅が広がるかもしれませんね。 というお話でした。
本当は自然言語のカリー化とモナド則も書きたかったですが、あまり頭が回らなかったので。
プロフィール
最新記事
P R