2017-02-10 54 views
0
for {set i 0} {$i < $num_nodes} {incr i} { 
    for {set j 0} {$j < 10} {incr j} { 
    $ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT" 
    set generated1 [expr $generated1 + 1] 
    } 
} 

我建立的請求報文生成的代碼在TCL NS2。我發現這些線路來自互聯網,但我不明白這一行:請求數據包生成代碼的NS2的Tcl/Tk

$ns at [expr 7.2+[expr rand()*3.0]] "$n($i) send_message 10 1 {[expr round([expr rand()*100000])]:[expr round([expr rand()*$numdata1])]:1:-1:-1} $MESSAGE_PORT" 

請告訴我這些線以上的邏輯是什麼?

回答

0

首先,這是使用嵌套的expr。清洗,高達:

$ns at [expr {7.2+rand()*3.0}] "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT" 

尋找在該字的字:

  • $ns
  • at
  • [expr {7.2+rand()*3.0}]
    • 7.2和10.2
    • 之間的隨機浮點值
  • "$n($i) send_message 10 1 {[expr {round(rand()*100000)}]:[expr {round(rand()*$numdata1)}]:1:-1:-1} $MESSAGE_PORT"
    • 引用的字符串,是受變量和命令替換(見Tcl(n)手冊頁)
    • 進一步看,我們有:
      • $n($i) < ==在一個關聯數組值鍵$i
      • [expr {round(rand()*100000)}] < == 0和100,000之間的隨機整數
      • [expr {round(rand()*$numdata1)}] < == 0和$numdata1

之間的隨機整數的Tcl替換所有以後,我們可能有一些像

nsValue at 9.99934 "nValue send_message 10 1 {42:1234:1:-1:1} 8080"