SSブログ

Tcl 8.5 の lassign で多重代入 [Tcl]

以前 Tcl には多重代入がないといって自分で実装 [1] していた裏ではすでに開発中の 8.5 で lassign コマンドが導入されていた。安定版じゃなくてもちゃんとチェックしていないと余計なことを書くはめになるということだ。

lassign list varName ?varName ...?

私が作ったのとは違って、リストが先に来て変数が後に来る。他にも (1) リストの要素数より変数名が多い場合は "" が代入されるとか、(2) 変数名の方が少ない場合はリストの「残り」がコマンドの戻り値になる、とかいうボーナス機能がある。
Tcl 8.5 の lassign は C で実装されているようだが、前回と同様 Pure Tcl でも以下のように書ける。

% proc lassign {l args} {
for {set i 0} {$i < [llength $args]} {incr i} {
  set var [lindex $args $i]
  set val [lindex $l $i]
  uplevel 1 [list set $var $val]
}
return [lrange $l $i end]
}
% lassign {a b c} x y z
% puts $x; puts $y; puts $z
a
b
c
% lassign {d e} x y z
% puts $x; puts $y; puts $z
d
e

% lassign {f g h i} x y
h i
% puts $x; puts $y
f
g

Tcl 8.5 ではもうひとつ lrepeat というリストコマンドが追加になっている。これは名前から予想されるとおりリストを指定回数繰り返して新しいリストを返す。

[1] http://blog.so-net.ne.jp/rainyday/2006-07-28


nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 2

ゆーすけ

ActiveTcl付属のサンプルで多重代入には
foreach $vars $vals {}
というのがよく使われているのを見たので、
私はこれを使っています。
by ゆーすけ (2007-09-03 11:06) 

ether

foreach がスコープを導入しないが故のイディオムですね。
by ether (2007-09-04 21:53) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。