用tcl NS-2中的单个数字分隔列表

时间:2017-01-31 08:04:40

标签: amazon-s3 tcl ns2 knox-amazon-s3-client

我想用一个数字来划分整个列表。让我说我采用变量$ Content,我想将以下列表与300个节点分开。 所以我接受命令$ Content / 300

  1. $ Content = {1 2 3 4 5} {2 3 4 5 6} {4 5 6 7 8 9} {3 4 6 8 9 0}
  2. 结果输出{1 2 3 4 5} {2 3 4 5 6} {4 5 6 7 8 9} {3 4 6 8 9 0} / 300,括号缺失且参数无效。< / p>

    请告诉我如何将所有列表与单个数字(300个节点)分开,因为在大括号中,每个数字都是一些参数的输出

1 个答案:

答案 0 :(得分:0)

请注意,Tcl是一种非常对空白敏感的语言,因此您需要在$ Content声明中的close和open大括号之间留一个空格。

您可以迭代$ Content,对于每个子列表,迭代元素并除以300,收集结果:

set Content {{1 2 3 4 5} { 2 3 4 5 6} { 4 5 6 7 8 9} {3 4  6 8 9 0}}
# note the spaces ......^............^..............^
set divisor 300
set newContent [list]
foreach sublist $Content {
    set newSublist [list]
    foreach elem $sublist {
        lappend newSublist [expr {$elem * 1.0 / $divisor}]
    }
    lappend newContent $newSublist
}
puts $newContent

输出

{0.0033333333333333335 0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666} {0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666 0.02} {0.013333333333333334 0.016666666666666666 0.02 0.023333333333333334 0.02666666666666667 0.03} {0.01 0.013333333333333334 0.02 0.02666666666666667 0.03 0.0}

如果你的Tcl版本是8.6,你可以使用lmap命令来缩短代码:

set newContent [lmap sublist $Content {
    lmap elem $sublist {expr {$elem * 1.0 / $divisor}}
}]

请注意,我乘以1.0以使用浮点除法而不是整数除法。