Разделите список с одним номером в tcl NS-2

Я хочу разделить весь список одним числом. Допустим, я беру переменную $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}

В результате получается результат {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 чтобы использовать деление с плавающей запятой, а не целочисленное деление.

Другие вопросы по тегам