lset

ReferenceTOPKeywords

コマンド名

lset - リストの1つの要素を変更します。

構文

lset varName ?index ...? newValue

解説

lsetコマンドは1つの引数varName を受け取り、Tclリストを含む変数の名前と解釈されます。同時に0個以上のリストへのindex も受け取ります。 これらのインデックスはコマンドラインで連続して現れるか、Tclリストに集められて1つの引数として現れます。それは最終的に、varNameの要素への新しい値として使われます。

インデックスが現れない場合、このコマンドは以下のフォーマットになります。

lset varName newValue

または

lset varName {} newValue

この場合には、newValueは変数varNameの古い値に置き換えます。

単一のインデックスを表示されたとき、lsetコマンドはvarName変数の内容をTclリストとして扱います。それはindex番目の要素を指します( 0がリストの最初の要素を示します) 。lsetはリストを解釈する際、中括弧と引用符、およびバックスラッシュに関してはTclコマンドインタープリタと同じルールに従います。但し、変数置換やコマンド置換は発生しません。このコマンドは指定された要素がnewValueに置き換えされることで新しいリストを作成します。この新しいリストは変数varNameに格納され、lsetコマンドの戻り値として返されます。

index が負数かつvarNameの要素個数より大きい場合、エラーが発生します。

index は値endの場合、リストの最後の要素を参照します。end-integer はリストの最後の要素から指定された整数オフセットを引いた要素を示します。

余分のindex 引数が提供されるた場合、各引数は順に前のインデックス操作結果 であるサブリストの要素を指します。したがって、スクリプトはサブリストの要素を変更できます。コマンド、

lset a 1 2 newValue

または

lset a {1 2} newValue

はサブリスト1の要素2newValueに置き換えます。

index引数に現れる整数は0また0より大きくなければなりません。各index引数に現れる整数は対応するリストの長さより絶対に少なくなければなりません。すなわち、lsetコマンドはリストのサイズを変更できません。インデックスが可能範囲の外にある場合はエラーが報告されます。

以下の各例において、xの初期値は

set x [list [list a b c] [list d e f] [list g h i]]
  => {a b c} {d e f} {g h i}

です。

生成された返り値は、x 新しい値にもなります。

lset x {j k l} => j k l
lset x {} {j k l} => j k l
lset x 0 j => j {d e f} {g h i}
lset x 2 j => {a b c} {d e f} j
lset x end j => {a b c} {d e f} j
lset x end-1 j => {a b c} j {d e f}
lset x 2 1 j => {a b c} {d e f} {g j i}
lset x {2 1} j => {a b c} {d e f} {g j i}
lset x {2 3} j

次の例において、xの初期値は

set x [list [list [list a b] [list c d]] \
            [list [list e f] [list g h]]]
 => {{a b} {c d}} {{e f} {g h}}

です。

生成された返り値は、x 新しい値にもなります。

lset x 1 1 0 j => {{a b} {c d}} {{e f} {j h}}
lset x {1 1 0} j => {{a b} {c d}} {{e f} {j h}}

参照

list, lappend, lindex, linsert, llength, lsearch, lset, lreplace, lsort

キーワード

element, index, list, replace, set


Copyright © 2001 by Kevin B. Kenny. All rights reserved. Copyright © 1995-1997 Roger E. Critchlow Jr.