Variables and arrays
Defining a variable in Tcl is very simple:set var1 1The variables can be referenced by prefixing the variable name with a $. For example to print the above variables, we can use
set var2 "Tcl Variable 2"
puts "var1=$var1, var2=$var2"Any situation in which you require that the value of the variable be used is one in which the $ prefix should be added to the variable name. In some situations, it is necessary to use the variable name directly. For example
incr var1can be used to increment var1. I guess you can think of it as the difference between call-by-reference and call-by-value: in the former case you use the variable name on its own, while in the latter you prefix it with a '$'.An alternative is to assign the results of a function to a variable. This can be done as follows:
set var3 [expr 5*10]This sets the variable var3 to the result of calling the expr function with the parameter 5*10. The expr function attempts to evaluate the supplied parameter to derive a value. Tcl interprets the square brackets as delimiters for a nested command: it attempts to execute the command inside the square brackets and assigns the result to var3 in this case. The returned value will be 50. Hence, the value 50 will be assigned to var3.In Tcl all variables are represented internally as strings. Whether that string can be viewed as an integer or a floating point number only matters when you use a function that requires numeric arguments.
Tcl also supports arrays. These are very useful in ns for storing, say, nodes. Tcl supports arrays that can be indexed by simple numeric arguments, as is standard in most languages, but Tcl also supports arrays that can be indexed by arbitrary strings. It is not necessary to declare the size of the array in advance. Here, two example of arrays are given
set n(0) [$ns node]In the first example the array is called n and the index is numeric. In the second, the array is called opts and the index is non-numeric.
set n(1) [$ns node]set opts(bottlenecklinkrate) 1Mb
set opts(ECN) "on"
0 comments:
Post a Comment