正規表現の限界を広げる [コンピュータ]
kazuさんが正規表現を超えるって書いているけど、正規表現に限界があるのは周知の事実じゃないのかな。
結局のところ、程度の問題なんじゃないかな。正規表現でどこまで複雑な事ができるかってのが問題なだけだ。
IPv4アドレスの解析を例に挙げているけど、調べてみると、以下のように書ける。
m{ ^ ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) $ }x
この程度なら、再利用云々を気にしないでも良いと思し、こんな事のために、いくつも関数を定義したくない。
「じゃあ、IPv6は?」ってなると、うーん... 例え書けたとしても、読めたものではないと思う。上記の正規表現もPerlの拡張正規表現を使っているから読む気になるだけで、POSIXの正規表現で書かれていたら読みたくない。
では、どうであれば良いのかと言うと、\d+の部分に、プログラマーが定義した、真偽を返す関数を書ければ良いのではないだろうか。例えば、こんな感じで書けるといいな。
/^\digitByte\.\digitByte\.\digitByte\.\digitByte$/
ここでは、digitByteは、プログラマーが定義した、文字列を受け取って0〜255の範囲の数かどうかを判定する関数としています。こういうのは、もはや正規表現とは言えず、新たな記法になるかもしれないけど。
こんな事ができる言語処理系があればいいな。Rubyか、Gaucheでやってくれないかな。
そういや、kazuさんって、正規表現が嫌いなんだった。
JavaFXの解説を読んでいる [コンピュータ]
JavaFXの仕様が気になるので、JavaFXの解説を読んでいる。
まだ、途中までしか読んでいないが、結構関数型言語に近い印象を受ける。手続き型の系統の言語が、関数型の言語の長所を取り入れようとすると、変な記号だらけの言語仕様になってしまう事が多いのだが、その問題は上手くクリアしてそう。
うーん。使ってみたくなるなあ。
ACMに入会した [コンピュータ]
ACMに入会した。年会費(デジタルライブラリの利用も含む)$199は高いなあ。
6年ほど前に、
に、ACMかIEEE Computer Societyのどちらかには入会すべきと書いてあったのを見て、入会しなくてはと思いつづけていた。
今までは、論文を読むよりも書籍で体系的に勉強するべきかなと思っていて、入会しなかった。でも今は、最新の情報や深い情報に触れないといけないなと思ってきているのと、買って勉強しなくてはいけないと感じるコンピュータ書籍が無くなってきて金銭的にも余裕が出てきたのとで、入会する事にした。
ちゃんと、論文を読んで元をとらないと。