TCL中的列表创建命令list、concat和 lrepeat
Tcl提供了三个列表创建命令:list、 concat和lrepeat。每一个命令都接受任意多个参数,返回结果为一个列表。它们的不同之处在于把参数组成列表的方式。
list命令把它的参数加入列表,即每个参数作为列表的一个独立元素,例如:
list a b "c d e " " f {g h}"
返回
a b {c d e } { f {g h}}
list命令总是会产生一个适当的列表结构,无论它的参数的结构是什么样的(它会自动添加必要的括号或反斜线), lindex命令总是可以从由 list命令生成的列表中取得原始元素。传给list的参数本身不必是形式完整的列表,因此如果不知道元素的值是什么,使用list命令创建列表是安全的方法。
命令concat接受任意多个列表作为参数,把参数列表中的所有元素串接为一个大的列表。如果某个输入列表的某个元素是嵌套的列表,这个元素会保持为嵌套的列表。同样是上面的例子,如果使用concat:
concat a b "c d e " " f {g h}"
将得到如下输出:
a b c d e f {g h}
concat需要它的参数有适当的列表结构,如果某个参数不是形式完整的列表,那么这 个命令给出的结果也可能不具备完整的列表形式。事实上, concat做的工作就是把它的参数字符串开头和结尾的空白裁掉,然后把各个元素以空格隔开,串接起来形成一个大的列表。concat完成的任务可以用双引号来完成,如:
set x {a b c}
set y {d e}
set z [concat $x $y]
输出为:
a b c d e
set z "$x $y"
输出同样是
a b c d e
lrepeat命令重复一个元素集合来创建列表,集合中各个元素作为单独参数给出,而第一个参数是指定的重复次数,例如:
lrepeat 3 a b c
→ a b c a b c a b c
lrepeat 3 [lrepeat 2 a] b c
→ {a a} b c {a a} b c {a a} b c