Разделите список с одним номером в tcl NS-2
Я хочу разделить весь список одним числом. Допустим, я беру переменную $Content и хочу разделить следующий список на 300 узлов. поэтому я беру команду $Content / 300
- $Content = {1 2 3 4 5} {2 3 4 5 6} {4 5 6 7 8 9} {3 4 6 8 9 0}
В результате получается результат {1 2 3 4 5}{ 2 3 4 5 6} { 4 5 6 7 8 9}{3 4 6 8 9 0}/300 с отсутствующими круглыми скобками и неверными аргументами.
Пожалуйста, скажите мне, как мы делим весь список с одним числом (300 узлов), потому что в фигурных скобках каждое число является выводом некоторых аргументов
1 ответ
Обратите внимание, что Tcl является языком, очень чувствительным к пробелам, поэтому в вашей декларации $Content вам нужен пробел между закрывающей и открытой скобками.
Вы можете перебрать $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
чтобы использовать деление с плавающей запятой, а не целочисленное деление.