A ''pure list'' in Tcl is a value that has a list internal representation but no string representation. Pure lists are significant primarily because the evaluator and bytecode compiler treat them specially. If confronted with a pure list, these components can recognize immediately that * the object in question is a single Tcl command; the words making up the command are precisely the elements of the list. * the object requires no substitution. They can therefore avoid using a parser on the object. They simply look up the command (element 0 of the list), and construct a parameter vector consisting of the list elements. Pure lists are preferred for callbacks such as traces, [[eval]] and [[uplevel]], [[after]] calls, Tk commands and bindings, and similar applications. The [[list]] command always returns a pure list. ---- ''Is it essential that there be no string rep - isn't a list rep sufficient for this either way? -jcw'' [DGP]: Yes, it is essential that there be no string rep. Consider these two strings: list a set a 1 set b 2 list a set a 1 set b 2 Both of those strings are valid Tcl lists. In fact they are both the same list. However, they are not the same string, and when evaluated as scripts, they are not the same script. This distinction is important because [[eval]] sees newlines as the ends of commands, while [[list]] sees them as just another whitespace character to separate list elements. ''Aha! So this means that one cannot construct a string, do an llength to force a list rep, and then expect the result to eval quickly. That's unfortunate. Is there a simple way to *force* a string to a pure list rep in Tcl?''