2009-08-21

リストの要素を変数に代入する


perl で、リストの要素を変数に代入する場合は次のように記述します。

$ perl
($a, $b, $c) = (1, 2, 3);
print $a, "\n";
print $b, "\n";
print $c, "\n";

^D1
2
3

$

とてもスマートにできます。


Tcl の場合だと次のようにします。perl の表現に比べると、とても武骨です。

$ tclsh
% set z [list 1 2 3]
1 2 3
% set a [lindex $z 0]
1
% set b [lindex $z 1]
2
% set c [lindex $z 2]
3
% exit
$

もっと簡単にできないかと考えたところ、名案が浮かびました。perl ほどではありませんが…。

$ tclsh
% foreach {a b c} [list 1 2 3] {}
% puts $a
1
% puts $b
2
% puts $c
3
% exit
$

考えてみると、だれか他の人の Tcl コードで既にこのように使われていた気がします。その時にはちゃんと理解できず見逃していたのでしょう。
 

2 件のコメント:

匿名 さんのコメント...

lassignで良いのでは?

bitWalk さんのコメント...

はい、その通りです。コメントをありがとうございます。認識不足でした。