忍者ブログ
Home > > [PR] Home > 思想 > 「Onoma」というサークル名なので、言語学をWikipediaでかじった程度のしがないプログラマーがだらだら話すだけ

Onomaブログ

同人創作サークル「Onoma」のメンバーが、自分の考えや思想を垂れ流すブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

「Onoma」というサークル名なので、言語学をWikipediaでかじった程度のしがないプログラマーがだらだら話すだけ

どうも、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...)に気づいた人々が更にいまして、それが現在ロジバンという言語となって世界中で研磨されております。

ロジバンは詳しく話すとその独特な概念で卒倒しかねません。
なのでまずは「はじめてのロジバン」辺りを見るといいかもしれません。

と書いても誰もリンク先に行って調べようとしないのはわかっているので、どういう言語なのかテキトー(適当ではない)に言いますと、
「予め定められた文法に適当な詞をテキトーに埋めていく」
言語です。

「はて?」
と思われた方は「はじめてのロジバン」辺りを(以下省略

述語理論とプログラミングにおける関数型パラダイムに関して

ここからプログラミング言語と言語学の話になってくるのですが、プログラミング言語には大きく3つのパラダイムがあります。いや、もっと分類できるのかもしれませんし、もっとまとめることもできるかもしれません。
  • 手続き型
  • 関数型
  • 連鎖型

とは言いつつも、コンピューターに仕事の手続きを伝えるのが「プログラミング」なので、全部手続き型と言えるのかもしれませんが。
(例えば、その手続きが文章の左上から右下に逐次実行されるのではなく、それぞれの行の手続き(処理)が並列(並行)して実行される言語だってありますので。(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足して」
と訳せますね。

プログラミングの関数型パラダイムと会話における共通点

さて、ここまでで何が言いたいのかと言うと、
「私達は日常会話でも遅延評価してますよね。関数型ですよね」
という話がしたかったのです。

「前の話、覚えてる?」
「前の話って?」
「ほら、この間のトマトの話」

これ、こう言い直せますよね、
「覚えてる? 前の話」
「前の話って?」
「トマトの話」

まとめ

そういうことで、サピア=ウォーフの仮説はもしかしたら正しいかもしれないので、
文章表現を豊かにしたい気持ちがあれば、諸外国語、国際共通言語(エスペラント等)、工学言語(ロジバン、各種プログラミング言語)、色々学んでみると、表現の幅が広がるかもしれませんね。 というお話でした。

本当は自然言語のカリー化とモナド則も書きたかったですが、あまり頭が回らなかったので。

PR
コメント
お名前
タイトル
メールアドレス
URL
コメント
パスワード

プロフィール

HN:
Onomaメンバー
性別:
非公開

P R