Tcl 带算子的循环条件

Tcl 带算子的循环条件,tcl,Tcl,我对Tcl语言没有经验。我试图运行一个循环,并试图将输出写入一个输出文件。我的循环条件没有生成任何输出。我仔细检查了我的输入,它们似乎是正确的。我的结束条件语法正确吗?如果我只使用$j>83,而不是&&,它的工作原理很好。(我在下面的代码上附加了一个剪贴,我在代码的第一行有一个问题) 对于{set j 1}{$j>83&$j83&$j

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

对于{set j 1}{$j>83&$j<104}{incr j}
{
set sel[atomselect top“剩余$j和名称CA”]
摩尔再分析顶
设置结构[$sel获取结构]
如果{[lindex$structs]==“H”}
{
递增计数
}
puts-nonewline$output$j
puts-非WLINE$输出“”
将$output$structs放入
}

假设明显的语法错误已更正

当condition expression子句的计算结果为false时,for命令停止。在第一次通过时,首先运行setup子句(
set j 1
),然后检查条件(
$j>83&$j<104
),由于1不在83和104之间,因此在运行循环体之前,
for
停止

您可能会更喜欢:

for {set j 84} {$j < 104} {incr j} {
    # The rest of your loop body here...
}
{set j 84}{$j<104}{incr j}{ #你身体的其他部分在这里。。。 } 在更复杂的情况下,您可以定义一个基本循环,然后在正文中放置一个单独的跳过规则:

for {set j 1} {$j <= 200} {incr j} {
    if {!($j > 83 && $j < 104)} {
        # Start the next loop round immediately
        continue
    }

    # The rest of your loop body here...
}
for{set j 1}{$j 83&&$j<104)}{
#立即开始下一轮循环
持续
}
#你身体的其他部分在这里。。。
}

但在这种情况下……只要在正确的范围内循环即可。

在{incr j}之后的换行符是打字错误吗?如果不是,您就有一个语法错误。(与if相同)此外,在调用lindex时没有给出索引,这意味着每次都将所有$struct与H进行比较。
for {set j 1} {$j <= 200} {incr j} {
    if {!($j > 83 && $j < 104)} {
        # Start the next loop round immediately
        continue
    }

    # The rest of your loop body here...
}