http://www.purl.org/tcl/home/man/tcl8.4/TclCmd/lindex.htm ---- lindex list index Treats its first argument as a Tcl list, returning the index'th [element] (where index must be an integer if numeric) from it. The index numbers begin with 0 (zero). If the index is negative or greater than or equal to the number of elements in list, an empty string is returned. If instead of an integer, the string '''end''' is provided, the last element of the list is returned. You can use '''end-''' ''integer'' to offset from the last element. Also note that recent http://purl.org/tcl/tip/ TIPs 22 and 45 have been implemented and comitted to Tcl 8.4 source CVS tree. Here is a summary of the new functionality from [Kevin Kenny]: Jeff Hobbs today committed to the CVS HEAD at Sourceforge the changes described in TIP's 22 (Multiple Index Arguments to lindex), 33 (Add 'lset' Command to Assign to List Elements), and 45 (Empty index lists for [[lindex] and [lset]) These changes augment the [[lindex] command so that it can extract elements from sublists, for example: [lindex {{a b c} {d e f} {g h i}} 1 1] => e They also implement an [[lset] command that may be used to change individual elements within lists and sublists. Taken together, these commands can be used to treat lists as if they were linear arrays. For instance, the following procedure might be used to reverse the order of elements in a list. proc reverse { list } { set i 0 set j [expr { [llength $list] - 1 }] while { $j > $i } { set temp [lindex $list $i] lset list $i [lindex $list $j] lset list $j $temp incr i incr j -1 } return $list } Updated documentation for the commands is available in the 'doc/' subdirectory in the source tree. The original proposals may be found at http://www.purl.org/tcl/tip/22.htm http://www.purl.org/tcl/tip/33.htm http://www.purl.org/tcl/tip/45.htm -- 73 de ke9tv/2, Kevin KENNY GE Corporate R&D, Niskayuna, New York, USA ---- [LES] on August 15 2005: What does [lindex] do that [lrange] doesn't? [schlenk] direct access to elements in nested lists. [LES] Look, Ma! No lindex! proc picknested { argList args } { for {set _depth 0} { $_depth < [llength $args] } { incr _depth } { set _range [ lrange $args $_depth $_depth ] set argList {expand}[ lrange $argList $_range $_range ] } return $argList } Testing: % picknested {{a b c} {d e {foo bar hey} f} {g h i}} 0 a b c % picknested {{a b c} {d e {foo bar hey} f} {g h i}} 0 1 b % picknested {{a b c} {d e {foo bar hey} f} {g h i}} 1 2 foo bar hey % picknested {{a b c} {d e {foo bar hey} f} {g h i}} 1 2 0 foo % picknested {{a b c} {d e {foo bar hey} f} {g h i}} 1 2 2 hey ---- See also [list], [lappend], [linsert], [llength], [lrange], [lreplace], [lsearch], [lsort] . [Trees as nested lists] ---- [Tcl syntax help] - [Arts and crafts of Tcl-Tk programming] - [Category Command]