与运营商的循环条件

时间:2018-01-19 11:38:34

标签: tcl

我没有Tcl语言的经验。我试图运行一个循环并尝试将输出写入输出文件。我的循环条件没有产生任何输出。我已经仔细检查了我的输入它们似乎是正确的。我的结束条件语法是否正确?如果我只使用&&而不是$j >83,那么它的工作正常。 (我在下面的代码中附上了一个剪辑,我的代码的第一行有问题)。

for {set j 1} { $j > 83 && $j < 104 } {incr j}
 {

    set sel [atomselect top "resid $j and name CA"]
    mol reanalyze top
    set structs [$sel get structure]
    if {[lindex $structs ] == "H"} 
    {
        incr count
    }
    puts -nonewline $output $j
    puts  -nonewline $output "   "
    puts $output $structs
 }

1 个答案:

答案 0 :(得分:1)

假设明显的语法错误已得到纠正......

当条件表达式子句的计算结果为false时,for命令停止。在第一次运行时,首先运行setup子句(set j 1),然后检查确实评估为false的条件($j > 83 && $j < 104),因为1不在83和104之间,因此{{1在运行循环体之前停止。

你可能会更开心:

for

在更复杂的情况下,您定义一个基本循环,然后在正文中放置一个单独的跳过规则:

for {set j 84} {$j < 104} {incr j} {
    # The rest of your loop body here...
}

但是在这种情况下......只需在正确的范围内循环开始。