読者です 読者をやめる 読者になる 読者になる

nitro_idiot’s diary

すべてフィクションということになっています。

括弧の海から

僕が「言語」と言うとき、大抵は「プログラミング言語」のことを指す。僕が一日で使う言語のうちのほとんどがプログラミング言語なので、これは僕にとって当然のことに思える。

喫茶店で本棚に並ぶ本をぼんやり眺めていたとき、ふと言語について学問的に学んでみたくなった。そしてWikipedia「言語学」の項を開いてみた。

一番面白いことは、言語の定義が未だ曖昧ということだ。言語ってなんだろう。そんな肝心なことがわかってない。

学者たちですら結論が出ていないんだ。この僕が言語について語るのも勝手だろう。

僕にとって言語とは「一定のルールに基づいた表現媒体」だ。脳で生まれたアイデアをシリアライズするツールであり、その先に生まれるコミュニケーションとは明らかに独立して存在する。

これはCommon Lispで表現するとこのようになる。

(let ((言語 "一定のルールに基づいた表現媒体"))
  ;; I'm here.
  )

ここでdefvarではなくletを使ったのは、グローバルな言語環境を侵さないためだ。自分が学者と争って言語の定義を決めようって気がないという意思表示である。

さらに、「言語」にもいろいろ種類がある。プログラミング言語はもちろん、話し言葉と書き言葉でも違ったものと言える。ボディーランゲージだって立派な表現媒体だ。それなら、言語の定義ももっと柔軟である必要があるだろう。

(flet ((言語 (&optional 用途)
         (format nil "~:[~;~:*~Aのための~]一定のルールに基づいた表現媒体" 用途)))
  ;; I'm here.
  )

プログラミング言語についての定義を加えよう。

(flet ((言語 (&optional 用途)
         (format nil "~:[~;~:*~Aのための~]一定のルールに基づいた表現媒体" 用途)))
  (let ((プログラミング言語 (言語 "コンピュータへの命令を記述する")))
    ;; I'm here.
    ))

冒頭で、僕が「言語」と言うとき、大抵は「プログラミング言語」のことを指している、と言った。

(flet ((言語 (&optional 用途)
         (format nil "~:[~;~:*~Aのための~]一定のルールに基づいた表現媒体" 用途)))
  (let ((プログラミング言語 (言語 "コンピュータへの命令記述")))
    (symbol-macrolet ((言語 プログラミング言語))
      ;; I'm here.
      )))

この環境で「言語」を評価すると、「コンピュータへの命令記述のための一定のルールに基づいた表現媒体」ということになる。

たぶん僕の脳を言語化するなら、こういう無数の括弧で囲まれた状態を持っているはずだ。そして日々、その括弧を増やし続け、その海に潜っている。