Tcl 8.5 の expr コマンド関係 [Tcl]
まだ続く Tcl 8.5 シリーズ。
Tcl 8.5 では expr の中で使える演算子に in と ni が使えるようになった。
expr というと Tcl で数学的な計算を行うときに使うものというイメージがあるけど if の条件節を評価するときに内部的に使われているコマンドでもある。
in と ni は数学計算というよりは if の中での使用を念頭に置いた演算子で、「a in b」は「リスト b の中に a が存在する場合真、それ以外は偽」ということになる。「a ni b」はその逆。いままで foreach とか使って泥臭く書いていたのがこうかけるようになる。
% set l {a b c} a b c % if {"a" in $l} {puts hit} hit % if {"d" in $l} {puts hit} %
Python とか awk の in 演算子と同じということですね。
そして expr の中で使える数学関数をユーザ定義できるようになった。今度からは expr は tcl::mathfunc 名前空間の中に定義されたプロシージャを関数として使う。
% proc tcl::mathfunc::gcd {m n} { if {$m == 0} { return $n } else { return [gcd [expr $n % $m] $m] } } % expr gcd(5499,6812) 13
今まで同様のことをやるときはコマンド置換を駆使しなければならず数式が見えにくくなっていたのが、これにより普通の関数っぽく見えるようになってすっきりする。
コメント 0