Nov.1997$B!!(B $B:G?7(B$B!!(B$B2a5n(B $B!V@$3&$R$7$c$2H/8+!W$KLa$k(B

3.Nov.1997 (Mon.)
 唐突だが、明日から (正確にはもう今日なのだが) またサラリーマンをすることになった。 いままでプロフィールのページに「日本で唯一の最終逸脱者」などとふざけたことを書いていたが、 それもこれでとりあえずは終わり、ということだ。

 そういうわけでこれからだいぶ忙しくなりそうなのである。 これまでも決して真面目に更新してきたとは言えないこのサイトも、 これからますます更新が滞りそうだ。せめて日記くらいは、 週に1、2回はつけるようにしたいとおもうが、それもままならないかもしれない。

 決してこのまま中断、ということにはしないので、どうかみすてないでいただきたい。

1.Nov.1997 (Sat.)
 最近、ruby にはまっている。

 ruby は「perl の手軽さでオブジェクト指向できるスクリプト言語」だそうである。 文法は perl よりかっちりしていて、それほどお気楽な感じではないが (perl がお気楽すぎるのだが)、 メモリ管理の必要が無いこと、強力な文字列操作機能を持っていること、ハッシュテーブル (連想配列) が使えることなど、テキスト処理で楽をするための基本的な仕様は perl と変わらない。強いて言うと、 ヒアドキュメントが使えないが、次期バージョンである 1.1 では使えるようになるようだ。

 一方、データ型については perl よりはるかに強力である。 perl には基本データ型はスカラー (文字列と参照) しかない。 一方変数にはスカラ変数、配列変数、ハッシュ変数の区別がある。 配列やハッシュの要素はスカラだけなので、複雑なデータを表現しようとすると、 参照を使うことになり、かなり面倒である。

 ruby は変数には型がない。Lisp などと同じ、typeless な言語である。 スコープによってグローバル変数、ローカル変数、インスタンス変数の区別はあるが、 配列変数だのハッシュ変数だのはない。では配列やハッシュは扱えないかというと、 そうではない。配列とかハッシュとかも含めて、そういった型の区別はデータの方にあるのだ。

 つまり、「任意のデータを並べた配列」もまた ruby のデータの一種なのである。 当然、配列データも配列の要素になることができる。つまり、配列のネストが可能なのである。 ハッシュについてももちろんそうである。

 例えば、この前、フォームから入力された html データの内容をチェックして不正なタグを修正するスクリプトを書いたのだが、 そのためのデータをちょっとここに抜粋してみよう。

    Paired_tag = {
        "i"         => {},
        "b"         => {},
        "s"         => {},
        "strong"    => {},
        "center"    => {},
        "sup"       => {},
        "sub"       => {},
        "h1"        => {},
        "h2"        => {},
        "h3"        => {},
        "h4"        => {},
        "h5"        => {},
        "blockquote"=> {},
        "nobr"      => {},
        "font"      => {"size" => /^[1-7]$/, "color" => /^(#[\da-f]{6,6}|\w+)$/i, "face" => //},
        "div"       => {"align" =>  /^center|right|left$/i},
        "a"         => {"href"  =>  //, "name" => //},
        "table"     => {
                        nil             => /^border$/,
                        "border"        => /^\d|\d\d|[0-2]\d\d$/,
                        "cellpadding"   => /^\d|\d\d$/,
                        "cellspacing"   => /^\d|\d\d$/,
                        "background"    => //,
                        "bgcolor"       => /^(#[\da-f]{6,6}|\w+)$/i,
                        "align"         => /^right|left$/,
                        "width"         => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        "height"        => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        },
        "tr"        => {},
        "th"        => {
                        nil             => /^nowrap$/,
                        "background"    => //,
                        "bgcolor"       => /^(#[\da-f]{6,6}|\w+)$/i,
                        "width"         => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        "height"        => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        "colspan"       =>  /^\d+\n$/,
                        "rowspan"       =>  /^\d+\n$/,
                        "align"         =>  /^center|left|right$/i,
                        "valign"        =>  /^top|bottom|middle$/i,
                        },
        "td"        => {
                        nil             => /^nowrap$/,
                        "background"    => //,
                        "bgcolor"       => /^(#[\da-f]{6,6}|\w+)$/i,
                        "width"         => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        "height"        => /^\d{1,3}|1\d{3,3}$|\d{1,2}%|100%$/,
                        "colspan"       =>  /^\d+\n$/,
                        "rowspan"       =>  /^\d+\n$/,
                        "align"         =>  /^center|left|right$/i,
                        "valign"        =>  /^top|bottom|middle$/i,
                        },
        "dl"        => {},
        "ul"        => {},
        "ol"        => {},
        "pre"       => {},
        }

 Paired_tag は使用できるタグのうち、閉じタグが必要なものを登録したハッシュテーブルである。 そのキーはタグ名で、値はそのタグ名についての情報を格納したこれまたハッシュテーブルなのだ。 その情報とは、そのタグで使えるオプションについての情報である。キーはオプション名、値は オプションの値として許される文字列を指定する正規表現である。 ruby では正規表現もデータ型の一種として扱われるのだ。

 このようなデータを Perl で書こうとおもったら、一苦労であろう。 じっさい、このタグ修正スクリプトは実に簡単に書けてしまった。

 残念なのは、いま私は主に ruby を Windows 環境で動かしているのだが、 やはり Windows だと今一つ ruby のよさが発揮できないように思えることだ。 これは Perl についても同様のことが言えるのだが。

 先月の唯一の日記で、 「相対性理論の謎と疑問」について触れたが、 なんとなく、こんなのを書いてしまった。 後藤教授のメールアドレスも実は分かっているので、お知らせしようかな、などと思っているのだが、 止めた方がいいかな...(笑)

$B:G?7(B$B!!(B$B2a5n(B $B!V@$3&$R$7$c$2H/8+!W$KLa$k(B