自然言語としてのPerl
昨日からプログラミングPerlを読んでいるんだけど, いろいろと味わった気分. まだ1章の中盤だけど.
まずコンテキストという概念に感動した. この場合はスカラーを求める(スカラーコンテキスト). またこの場合はリストを求める(リストコンテキスト). たとえ求めたモノと違うモノが与えられても, できる限り解釈しようとする. またどっちにでも対応するコトもできる(だからwantarrayとかあるんだろうな). 自然言語もそうなんじゃないかなぁ?
@weeks = ('Sunday', 'Monday', ..., 'Friday', 'Saturday'); // リストコンテキスト # ifのカッコ中はブール値を求める. すなわちスカラーコンテキスト. # 配列はスカラーコンテキスト中で要素数を返す. 数値の0は偽, それ以外は真. if (@weeks) { print "よって真"; } # だからシンプルにこう書ける(普通ならforeach使うけどね). while (@weeks) { print shift @weeks, "\n"; }
あとpackageの説明がうまかった. たしかに会話や文章では何について話すかをまず決め(主題化), そのあとは決めた対象を会話中から省略してしまう. packageも一緒.
package Rabbit; use Cat; sub bark { print "ぶぅぶぅ, きーきー\n"; } bark(); # このbarkはRabbitのbark(主語が省略 -> packageに指定されたモノ) Cat::bark(); # これはCatのbark(主語が指定されている)
ただ"名前空間を確立する"という説明だけでは自然言語としてのPerlという視点を得られなかったと思う.
また"物事をアナロジーで解決するな"と言うけれどホントそうだな, って思う. 自分の中にある知識前提で読んでいたら"はいはい, 名前空間, わろすわろす"でこの主題化の話をスルーしていたな, きっと. まぁ結果に違いはないんだろうけど, こういう側面を見られてうれしい.
このあたりにソッコー感動してしまった. 他にコンテキストなどの概念を備えた言語ってあるのかな? そういう面でも興味が湧く時間を味わえた. まだまだ片鱗だと思うけど先が楽しみ!