大学で初めて私がプログラミングを学んだとき、最初に戸惑ったのはこの点でした。 変数や関数の名前はその内容と無関係に、勝手に決めることができる一方で、 一度付けた名前はその後は一言一句間違えずに使わなければならないのです。 何という自由と何という狭量!ここでは名前は一見言語のようでありながら、 言語の持つ意味的融通や曖昧性をすっかり奪い取られ、同一性を示す単なる記号 と化しています。
たとえば、階乗を計算する関数は普通 scheme (Lisp) では下のように書かれます が、
(define (fact n) (if (= n 1) 1 (* n (fact (- n 1)))))ここで引数は整数だからといって 'n' である必要はなく、'p' にしても全く同じ ように機能します。
(define (fact p) (if (= p 1) 1 (* p (fact (- p 1))))) > (fact 7) 5040また、以下は全く別のプログラム?に見えますが、実は階乗を計算します。
(define (forever you) (if (friend you me) me (call you (forever (lover you me))))) (define friend =) (define me 1) (define call *) (define lover -) > (forever 6) 720さらに名前を置き換えれば、以下のようなプログラムでも階乗を計算することが わかります。
(define moe =) (define pugya *) (define doe -) (define uga 1) (define-macro (muha . body) `(if ,@body)) (define-macro (puha . body) `(define ,@body)) (puha (hoge boe) (muha (moe boe uga) uga (pugya boe (hoge (doe boe uga))))) > (hoge 7) 5040 > (hoge 44) 2658271574788448768043625811014615890319638528000000000ここまでくると、ほとんどプログラムのようには見えません。ただ, scheme のモデル となっているλ-式の世界では、自然数、関数、条件分岐などのすべてがλ-式に よって書き表され得ることを考えると、これは当然の結果であるともいえます。 つまり我々は、λ-式によって表される論理式に単に名前をつけて扱っている だけで、その名前と論理的実体とは完全に別の、分離したものなのです。
それでは、プログラミング言語における名前の意味とは 一体どこにあるのでしょうか。
図: 言語と解釈
Jakobson は「言語学と詩学 *」の中で、「記号と対象の
間の根本的な二分関係を深化する」ものが詩的機能であり、 「詩的機能は(意
味的)等価の原理を選択の軸から結合の軸へ投影する」と述べていますが、表
現の絶対化を志向する詩にとって、結合の軸=連辞へ展開されるリズムが
表現の触知性を高めるのと同様に、
選ばれた言葉、緊密な表現によって一つ一つの言葉それ自
体の触知性を深めることも詩的機能のもう一つの要素だと言っていいでしょう。
これは、選択の軸、すなわち範列的機能の特質である等価性を
連辞的軸に投影したのとちょうど逆に、連辞的機能の特質である構造的意味を
範列に投影したと解釈することもできます。
このように見たとき、言語に内在する記号と内容の乖離を詩が超えようとす
るのと同様に、われわれはプログラミング言語においても詩的機能によって表
記と、その表す概念とを架橋しようとしていると言えないでしょうか。
計算機の論理は人間の持つアナログ的思考から結晶化された、本来的に異質な
ものです。その理解のためには、我々は論理そのものではなく、概念へとつな
がってゆく詩的機能に大きく頼らざるを得ません。
しかしながら、ここで前提された "自然言語はPSGで記述できる" という テーゼこそが、プログラミング言語の非言語性を隠蔽してきたように思われます。 この立場に立つならば、二者の違いは文法の階層のみであり、「PSGによって 自然言語が解析できる」のと同様に、CFG によって自然言語表記された プログラミング言語が解析でき、意味が表現できるという見方が生まれるように 思えるからです。
しかし、普通に考えればわかるように、日々変化し、使用者によって異なる 自然言語は固定された文法によって解析することはできません。 むしろ、そうしたずれを常に生み出し、規則を産出しまた破壊する能産性こそが 自然言語の豊かさの源泉なのですから、プログラミング言語と自然言語の間には 本質的な溝があり、われわれは詩的機能によってその間隙を跳躍しようと 試みていると言えるのではないでしょうか。
(*) R. Jakobson, 『一般言語学』. みすず書房, 1973.