Ano, retezec je v zasade totozny se seznamem, je to podobne jako treba s rozlozenim radky v awk ($0 cely radek, tady je cely radek proste ta promenna; $1 je prvni polozka pred oddelovacem - bezne whitespacem - a tady je to [lindex $x 0], cislovani polozek je od 0).
Podle definice: A list is simply a string with list elements separated by white space.
Uvedeny retezec je tedy i seznamem o ctyrech clenech. Ale pozor. Slozene zavorky ztraci svuj specialni vyznam v uvozovkach:
% set x {a b}
a b
% puts $x
a b
% set r {$x g}
$x g
% puts $r
$x g
## ale pozor !
% set z "e {$x} f"
e {a b} f
% puts $z
e {a b} f
Co se jeste seznamu seznamu tyka, tak z clanku mozna nemusi byt nekomu jasne, proc se list v prikladu inicializuje prikazem list a ne proste zavorkama, tedy:
% set novySeznam [list 1 dva 3]
a ne
% set novySeznam {1 dva 3}
Takto je to ekvivalentni, ale rozdil bude az budete potrebovat ruzne expandovat ci neexpandovat promenne pri tvorbe listu. Ve slozenych zavorkach se neexpanduje nic, v uvozovkach vse. Takze prikaz list je cesta, jak udelat mix obojiho :-). Tedy treba:
% set y [list {$x} $x]
{$x} {a b {c d} {e f}}
% puts [lindex $y 1]
a b {c d} {e f}
% puts [lindex $y 0]
$x
ale
% set y "{$x} $x"
{a b {c d} {e f}} a b {c d} {e f}
% set y {{$x} $x}
{$x} $x
% set y {"$x" $x}
"$x" $x
Tcl je bezva jazyk na rychle sflikovani nejakeho skriptu s GUI, ale tyhle cary s expandovanim a neexpandovanim aby prase zvalelo... Nicmene jak si zvyknete, tak uz budete asi v pohode :-).