自然言語としての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という視点を得られなかったと思う.

また"物事をアナロジーで解決するな"と言うけれどホントそうだな, って思う. 自分の中にある知識前提で読んでいたら"はいはい, 名前空間, わろすわろす"でこの主題化の話をスルーしていたな, きっと. まぁ結果に違いはないんだろうけど, こういう側面を見られてうれしい.

このあたりにソッコー感動してしまった. 他にコンテキストなどの概念を備えた言語ってあるのかな? そういう面でも興味が湧く時間を味わえた. まだまだ片鱗だと思うけど先が楽しみ!