TIP 269: Add 'string is list' to the 'string is' Subcommand

Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2017 Conference, Houston/TX, US, Oct 16-20
Send your abstracts to tclconference@googlegroups.com
by Aug 21.
Author:		Joe Mistachkin <joe@mistachkin.com>
State:		Final
Type:		Project
Vote:		Done
Created:	19-May-2006
Keywords:	Tcl,lists,strings
Tcl-Version:	8.5
Post-History:	

Abstract

The string command supports tests for a number of Tcl's basic types, for example, integers, doubles, and booleans. This TIP proposes adding lists to the set of things that can be checked for.

Rationale

The string command includes tests for the common Tcl types: string is boolean, string is double and string is integer. Unaccountably, string is list is missing from the list, making it difficult for an input validation procedure to determine whether, in fact, a string contains a proper list.

Currently, something similar to the following incantation is required:

 set is_list [expr {![catch {llength $str}]}]

The above construct (and others like it) are extremely counterintuitive, especially to people without intimate knowledge of Tcl.

Compare and contrast with:

 set is_list [string is list $str]

Since string is currently serves in this capacity for determining whether a string can be correctly interpreted as an integer or double, it seems only natural to extend it so that it can determine whether a string can be correctly interpreted as a list.

Specification

This document proposes augmenting the string is command with a string is list subcommand, as follows:

string is list ?-strict? ?-failindex var? str

The result will be 1 if the string has proper list structure; otherwise, it will be 0. The option -strict is accepted for syntactic compatability with other forms of string is but has no effect since empty strings are proper lists.

Reference Implementation

A reference implementation of this TIP is available http://sf.net/tracker/?func=detail&aid=1491459&group_id=10894&atid=310894 .

Copyright

This document has been placed in the public domain.

History