【发布时间】:2014-03-18 08:44:03
【问题描述】:
在 tcl 中,我需要为未知数量的变量值的每个可能组合执行一个脚本。
用文字描述:
A 从 a0 -> a1 开始,步长为“da”
B 从 b0 -> b1 开始,步长为“db”
C 从 c0 -> c1 开始,步长为“dc”
....
变量的数量可以变化。注意:变量的名称事先不知道,“A”也可以称为“Ape”或其他任何名称。其他变量也是如此。
到目前为止我所拥有的是:
array set min_vals {A $a0 B $b0 C $c0 ...} ;# --> These are user-defined
array set max_vals {A $a1 B $b1 C $c1 ...} ;# --> These are user-defined
array set step_vals {A $da B $db C $dc ...} ;# --> These are user-defined
# First I determine the number of variables and the number of values they can have
set nr_vars [array size min_vals] ;# Determine nr of variables
set nr_vals [list] ;# --> Set empty list for nr of values for each variable
foreach var_name [array names min_vals] {
set nr [expr {round( ( $max_vals(${var_name})-$min_vals(${var_name}) ) / $step_vals(${var_names}) )}]
set nr_vals [concat $nr_vals $nr]
}
现在我需要以某种方式遍历每个可能的组合:
[A=a0, B=b0, C=c0]
[A=a0+da, B=b0, C=c0]
[A=a0+2*da, B=b0, C=c0]
...
...
[A=a1, B=b0, C=c0]
[A=a0, B=b0+db, C=c0]
[A=a0+da, B=b0+db, C=c0]
...
...
[A=a1, B=b1, C=c1]
我希望有一种简单的方法可以做到这一点。我能想到的唯一方法是使用包含所有组合的迭代次数的单个循环,并让每个迭代次数对应于特定组合。但我相信一定有一种不那么繁琐的方法。
_
编辑:
也许我并不清楚我到底想要什么。我不在乎实际输出。我的目标是将每个变量设置为正确的值并使用这些变量运行另一个脚本:
set A $a0
set B $b0
set C $c0
source run/some/script.tcl
并对A、B 和C 的每个可能的值组合重复此操作。
【问题讨论】:
-
This 可以帮助您获得一些想法。
标签: tcl combinations permutation