首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Tcl中循环调用进程和赋值

在Tcl中循环调用进程和赋值
EN

Stack Overflow用户
提问于 2019-07-10 23:10:16
回答 2查看 146关注 0票数 0

我目前正在使用一个循环将值迭代到Tcl中的进程(邻居)中。

代码语言:javascript
复制
for {set i 0} {$i < $val(nn)} {incr i} {
    for {set j 0} {$j < $val(nn)} {incr j} {
        $ns at 0.0 "neighbors $node($i) $node($j) $i $j"
    }
}

上面的代码允许我在这个过程中使用所有我需要的值。然而,在进程内部,一些值被分配(到一个列表),不再需要遍历。该过程中的一个简短片段:

代码语言:javascript
复制
} else {
    puts "..... Do nothing ....  $nd1 - $nd2"
    if {([lsearch -exact $heads $nd1] != -1) || ([lsearch -exact $members $nd1] != -1) } { 
        incr $nd1 
    }
}

这是该过程中循环的结束。puts只是一个标记,但它会检查一个项目是否包含在两个列表中的任何一个列表中。如果它在任一列表中,则递增它,然后移动到下一个可能的值。不再需要对该值进行检查/循环,因为它已经被放入列表中。

如何防止该值继续被使用?“流程调用”循环将始终覆盖流程中发生的事情,因此即使分配的值也将继续使用。在Tcl中有不同的调用流程的方式吗?或者至少,以一种不同的方式将值提供给Tcl中的进程?或者我猜,把他们拉出来?

值得一提的是,下面是我希望提供给的进程(n1和n2是内存位置,nd1 nd2是实际的数字标识符)

代码语言:javascript
复制
set heads {}
set members {}


proc neighbors {n1 n2 nd1 nd2} {
global heads members bool allNodes 
    puts "Members --- $members"
    puts "heads --- $heads"
    if {([lsearch -exact $heads $nd1] == -1) && ([lsearch -exact $members $nd1] == -1) } { 
        lappend heads $nd1
        set currentHead $n1
        puts "Current Head: $currentHead $n1 $nd1"
    } else {
        puts "..... Do nothing ....  $nd1 - $nd2"
        if {$nd1 in $heads || $nd1 in $members} then return
#here I want it to go to the next nd1 value and NEVER use it again if it 
#has already been processed 
    }
#Otherwise, do neighbor test with nd2 
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56973732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档