## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > lset

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

### NAME

lset — リスト内の一個の要素を変更する Change an element in a list

### 構文 SYNOPSIS

lset varName ?index ...? newValue

### 説明 DESCRIPTION

この lset 命令は､假引数 varName を受取り､それが Tcl リストを含んでいる変数の名前であると解釈する｡次に､零個以上の索引 index をリストに入れて受取る｡この索引は､命令行に連続して並べられるか､又は､Tclリストの中にまとめられて一個の引数として置かれる｡最後に､この命令は varName の要素の為の､新しい値を受取る｡[訳註:本命令の操作対象は一個の要素のみだが､操作対象に､仔､孫リストの要素を､lindex 命令と同じ要領で､指定できる｡lreplace 命令は､仔､孫リスト内の要素は扱えないが､連続した複数の要素を操作できる｡] The lset command accepts a parameter, varName, which it interprets as the name of a variable containing a Tcl list. It also accepts zero or more indices into the list. The indices may be presented either consecutively on the command line, or grouped in a Tcl list and presented as a single argument. Finally, it accepts a new value for an element of varName.

索引がない場合､この命令はこの様な形式をとる: If no indices are presented, the command takes the form:

    lset varName newValue

又は or

    lset varName {} newValue

この場合､変数 varName の古い値を newValue で､置換える｡ In this case, newValue replaces the old value of the variable varName.

単一の引数を伴う時､この lset 命令は varName 変数の内容を Tcl リストとして扱う｡命令は､その中の index 番目の要素を取り扱う(0はリストの最初の要素を参照する)｡リストを解釈実行する時に､ lset は､波形括弧､引用符号､逆斜線に対しては､Tcl 命令の解釈実行機能と同じ規則を遵守する; しかし､変数置換と命令置換は起らない｡この命令は､指定された要素が newValue によって置換えられた新しいリストを構築する｡その新しいリストは変数 varName に保存され､又､この lset 命令からの返り値にもなる｡ When presented with a single index, the lset command treats the content of the varName variable as a Tcl list. It addresses the index'th element in it (0 refers to the first element of the list). When interpreting the list, lset observes the same rules concerning braces and quotes and backslashes as the Tcl command interpreter; however, variable substitution and command substitution do not occur. The command constructs a new list in which the designated element is replaced with newValue. This new list is stored in the variable varName, and is also the return value from the lset command.

もし index が負か､$varName 中の要素の個数より大きいと､不具合が生じる｡ If index is negative or greater than the number of elements in $varName, then an error occurs.

もし index が $varName 中の要素の個数と等しいと､与えられた要素がリストに追加される｡[訳註:この目的に"end+1"が使えるらしい] If index is equal to the number of elements in $varName, then the given element is appended to the list.

それぞれの単純な index 値の解釈は string index 命令の場合と同じで､単純算術的指定と､リスト末尾からの相対指定に対応している｡ The interpretation of each simple index value is the same as for the command string index, supporting simple index arithmetic and indices relative to the end of the list.

もし､追加的な index 引数が与えられると､それぞれの引数は､順にそれ以前の索引操作で示された仔リストの中の要素を指す為に使われ､仔リストの中の要素を変更する為の記述を許容する(又は仔リストに要素を追加する)｡この命令では､ If additional index arguments are supplied, then each argument is used in turn to address an element within a sublist designated by the previous indexing operation, allowing the script to alter elements in sublists (or append elements to sublists). The command,

    lset a 1 2 newValue

又は､ or

    lset a {1 2} newValue

は､仔リスト1の要素2を newValue で置換える｡ replaces element 2 of sublist 1 with newValue.

それぞれの index 引数に表れる整数は､零かそれ以上でなければならない｡それぞれの index 引数に表れる整数は､対応するリストの長さより小さいか等しくなければならない｡言い換えると､この lset 命令は要素を(現在の末尾の次にその要素を設定して)追加する場合のみリストの寸法を変更することができる｡もし､索引が許容範囲を超えると､不具合が報告される｡ 　　　 The integer appearing in each index argument must be greater than or equal to zero. The integer appearing in each index argument must be less than or equal to the length of the corresponding list. In other words, the lset command can change the size of a list only by appending an element (setting the one after the current end). If an index is outside the permitted range, an error is reported.

### 用例 EXAMPLES

このそれぞれの例では､ x の初期値は: 　　　 In each of these examples, the initial value of x is:

    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 の新しい値になる(但し､最後の場合を除く､其処では､不具合が x の値を変えずに留らせている)｡　　　 The indicated return value also becomes the new value of x (except in the last case, which is an error which leaves the value of x unchanged.)

    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 {g h i}
    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
          → {a b c} {d e f} {g h i j}
    lset x {2 4} j
          → list index out of range

次の例では､x の初期値は: 　　　 In the following examples, the initial value of x is:

    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 の新しい値になる｡ 　　　　 The indicated return value also becomes the new value of 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}}

### SEE ALSO

list, lappend, lassign, ledit, lindex, linsert, llength, lmap, lpop, lrange, lremove, lrepeat, lreplace, lreverse, lsearch, lseq, lsort(n) string

### KEYWORDS

element, index, list, replace, set
Copyright © 2001 Kevin B. Kenny <kennykb(at)acm.org>. All rights reserved.