Main Content

The difference between lists and strings - Tcl

Archive - Originally posted on "The Horse's Mouth" - 2011-08-16 17:34:11 - Graham Ellis

There's not much difference between lists and strings in Tcl. In fact a list is just a string in a particular format, and if you split a string that contains just letters and spaces into a "list" you may not change anything AT ALL. Which means that if you make a coding error you may not spot it until some of the characters which form a part of the list syntax to handle specials are used within the string.

Here's a listish setup:

  set john {{tom simon ann sophie cindy}}

But when I split that and iterate through the elements,I don't get what I want - strange things happen with the inner { and }. Code:

  set mitems [split $john]
  foreach thing $mitems {
    puts $thing
  }


When I run that, the results I get are:

  {tom
  simon
  ann
  sophie
  cindy}


As my handling of the list of lists wasn't correct .... what would have been better is to have written


  foreach thing $john {
    foreach name $thing {
      puts $name
    }
  }


which would give

  tom
  simon
  ann
  sophie
  cindy


For Perl, Python, Ruby and PHP programmers, who are used to split doing a considerable amount of work, the small step taken by Tcl's split comes as a bit of a surprise, and even people who've been writingTcl for a while can end up scratching their head at extra curly braces which they hadn't expected from code like that above.

I'm teaching Tcl in a couple of weeks ... starting on Tuesday 30th August for delegates new to programming, and the following day for delegates with prior experience of another language - see [here] for a description of that course.