首页 >> 仿真软件说明 >>VMD >>tcl脚本 >> Tcl-循环命令
详细内容

Tcl-循环命令

时间:2025-05-10     作者:邱新龙翻译【转载】   来自:vmd手册   阅读

for

for start test next body

for是一个与C语言中for结构类似的循环命令。start、next和body必须是Tcl命令字符串,test是表达式字符串。for命令首先调用Tcl解释器来执行start进行一些初始化操作。然后将test做为表达式进行评估。如果评估结果非零,则调用Tcl解释器执行body,然后调用解释器执行next,然后重复以上步骤,直到test表达式评估结果为零。如果在body中调用了continue命令,则跳过当前body中continue后面的命令,进入下一次循环。如果在body中调动了break命令,则终止for循环命令。for循环命令返回一个空字符串。


for {set x 0} {$x<5} {incr x} {

puts $x;

}

for循环中的test表达式必须要用大括号包围起来,否则会在for循环之前首先进行变量替换,这会导致test表达式无法感知到变量的变更,从而导致循环不执行或者无限循环。当test表达式被大括号包围起来,会使变量替换延迟到表达式求值时,从而能偶感知变量的变更。具体是无限循环还是循环不执行,取决于变量替换后表达式的值。如果值为非零则会无限循环,否则循环不执行。


foreach

foreach varName list body

foreach varlist1 list1 ?varlist2 list2 ...? body

foreach循环命令可以循环一个或多个列表中的值。在循环时,list中的元素会像使用lindex命令一样从前到后依次分配给varName,然后调用Tcl解释器执行body中的命令。


set values {a b c d e f g h}

foreach value $values {

    puts $value

}

foreach还可以同时循环多个列表。每个列表都有一个与之对应的循环变量。在每次迭代时都会将list中的值分配给对应的varlist。list中的每个值会按顺序使用一次。最大迭代次数为list的最大元素数,从而保证list中的值一地你给会被迭代一次。如果列表中的值已经分配完毕,但是循环未结束,则使用空字符串填充对应的循环变量。


set values {a b c d e f g h}

set numbers {1 2 3 4 5}

foreach number $numbers value $values {

    puts "number:$number->value:$value"

}

list中的值每次可以迭代多个,只需要将varName指定为一个变量列表。每次迭代时会从list中取出列表中变量数量个值,依次分配给变量列表中的变量。当list中元素数量不足时会用空字符串填充变量。


set numbers {1 2 3 4 5}

set values {a b c d e f g h}

foreach {i j k} $values {

puts "$i--$j--$k"

}

foreach number $numbers {i j} $values {

puts "$number--$i--$j"

}


while

while test body

while命令首先计算test表达式的值,如果为true,则调用Tcl解释器执行body中的命令。执行完body中命令后,会再次计算test表达式,重复以上步骤直到test表达式为false为止。如果在body中调用了continue命令,则跳过当前body中continue后面的命令,进入下一次循环。如果在body中调动了break命令,则终止while循环命令。while循环命令返回一个空字符串。


set x 0

while {$x<5} {

    puts $x;

    incr x;

}

与for命令一样,test表达式必须用大括号包围起来。否则while循环会不执行或者无限循环。


break

set x 0

while {$x<5} {

    if {$x<3} {

        puts $x;

    } else {

        break;

    }

    incr x;

}

通常用于循环结构for、foreach、while中提前终止break所在循环。


continue

set x 0

while {$x<5} {

    if {$x==3} {

        incr x;

        continue;

    }

    puts $x;

    incr x;

}

通常用于循环结构for、foreach、while中提前结束本轮循环。


最新评论
请先登录才能进行回复登录
技术支持: CLOUD | 管理登录
seo seo