Author: Wolf-Dieter Busch <wolf-dieter.busch@gmx.de>
State: Draft
Type: Project
Tcl-Version: 8.7
Vote: Pending
Created: 29-Jan-2007
Post-History:
Keywords: Tcl, lindex
Abstract
The command llength currently returns the length of a list. Sometimes it is desirable to know the length of a nested list. This TIP proposes an improvement to llength to do that.
Description
Currently, finding the length of a nested list requires the combination of llength and lindex. This works, but is not very clean for a comparatively common operation when you compare with straight lindex usage. This TIP proposes to enhance llength so that it also does the indexing, making it's usage in such situations cleaner and less subject to programming errors.
Proposed Change
The llength command shall be updated to have syntax like this:
llength list ?indexList ...?
When no indexList is supplied, the current behavior is used. When one or more indexList arguments are supplied, they are used to restrict which part of list is taken the length of, just as if lindex had been used to index into list.
Thus, [llength {a {b c} d}] shall return 3 as nowadays, [llength {a {b c} d} 1]> shall return the length of the nested list on index 1, here {b c} => 2, and [llength {a {b c} d} 1 0] shall return the length of the nested list on index 0 of nested list on index 1, i.e., 1 in this case.
Compatibility
As this only changes a way of use of the llength that currently returns an error, there are no compatibility problems.
Example Implementation
The procedure idxllength (below) does what is described above, but inefficiently:
proc idxllength args {
llength [lindex {*}$args]
}
Copyright
This document has been placed in the public domain.