Обратите внимание, что 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
, чтобы использовать разделение с плавающей точкой, а не целое деление.
Какой результат вы ожидаете от операции, которую вы пытаетесь выполнить? –
Я хочу сгенерировать некоторый вывод из этого списка. Фактически в $ Content содержатся некоторые аргументы ($ delay, $ range, $ priority), и эти аргументы генерируют некоторое значение в виде списка. Затем мы делим общее число узлов. поэтому на основе этого вывода я решит либо я выберу этот лучший форвардер, либо нет. –
Извините, ваше объяснение того, чего вы пытаетесь достичь, непонятно. Как я уже сказал, пожалуйста, дайте ** буквальный пример примера, который вы ожидаете. –