我目前正在使用一个循环将值迭代到Tcl中的进程(邻居)中。
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"
}
}
上面的代码允许我在这个过程中使用所有我需要的值。然而,在进程内部,一些值被分配(到一个列表),不再需要遍历。该过程中的一个简短片段:
} 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是实际的数字标识符)
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
https://stackoverflow.com/questions/56973732
复制相似问题