TIP #331: Allow [lset] to Extend Lists


TIP:331
Title:Allow [lset] to Extend Lists
Version:$Revision: 1.5 $
Author:Kevin B. Kenny <kennykb at acm dot org>
State:Final
Type:Project
Tcl-Version:8.6
Vote:Done
Created:Monday, 22 September 2008

Abstract

This TIP proposes to modify the lset command to allow it to extend lists.

Proposal

The lset command shall be modified to allow the index end+1 (or any equivalent index designating the element one beyond the last element of the list). For the simple usage:

    lset list end+1 foo

the effect is the same as if the script had evaluated the command:

    lappend list foo

For the usage:

    lset list $n end+1 foo

the effect is much the same as if the script had evaluated:

    set temp [lindex $list $n]
    lappend temp foo
    lset list $n $temp

(except, of course that no temp variable is created)

The usage:

    lset list end+1 0 foo

or, equivalently,

    lset list end+1 end+1 foo

is equivalent to

    lappend list [list foo]

Rationale

Clearly, there are equivalent constructs to all of these usages. Nevertheless, it is convenient not to have to worry about whether a given index is in bounds, particularly when iterating through a vector or matrix. With the proposed change, many of the standard algorithms in linear algebra will just work, without either having to preinitialize a list to a given size or to have a test to determine whether to use lappend or lset to store a given element.

Alternatives

Explicitly out of scope is the treatment of indices greater than or equal to end+2. Setting non-contiguous elements would raise false expectations of sparse lists, NULL elements, and so on.

Copyright

Copyright 2008 by Kevin B. Kenny.

This document may be distributed subject to the terms and conditions set forth in the Open Publication License, version 1.0 [1].


Powered by Tcl[Index] [History] [HTML Format] [Source Format] [LaTeX Format] [Text Format] [XML Format] [*roff Format (experimental)] [RTF Format (experimental)]

TIP AutoGenerator - written by Donal K. Fellows