<name of variable> set [split "[string repeat "-,-," [columns]]-",]
Вы должны распаковать команды Tcl изнутри, потому что самые внутренние вложенные скобки выполняются первыми.
columns
- это proc , который, мы надеемся, возвращает целое число.
- затем
string repeat
повторяет "-, -," столько раз.
- тогда строка в двойных кавычках добавляет завершающий
-
- затем
split
должен разбить эту строку "-, -, -, ...-" на запятые, что приведет к * списку "2 * столбцов + 1" дефисов *.
За исключением
- отсутствует пробел перед последней запятой в команде split
- команда
set
выглядит следующим образом: set varname value
(если вы не имеете дело с объектом)
set <name of variable> [split "[string repeat "-,-," [columns]]-" ,]
# ...............................................................^
Демонстрация:
set columns 6
proc columns {} {return $::columns}
set result [split "[string repeat "-,-," [columns]]-" ,]
puts $result
puts [llength $result] ;# should be 13
- - - - - - - - - - - - -
13
Вы можете достичь того же результата с:
set result [lrepeat [expr {2 * [columns] + 1}] "-"]
Tcl на самом деле очень простой язык. Весь синтаксис имеет только 12 правил: https://www.tcl.tk/man/tcl8.6/TclCmd/Tcl.htm