funcname arg1 ... argn
In other words a command is separated from its arguments by spaces, and
the arguments are separated from each other by spaces. The end
of the argument list is signaled by the end of the line. To continue
a command onto a new line, use a backslash as the last character
of the line.
Here is an example of a Tcl/Tk command:
set a 4
This command creates a variable a
and sets it to 4.
Variables in Tcl/Tk can hold only strings, so the
fact that 4 is an integer does not have any significance
to the set command. The name of the
variable (in this case "a") in Tcl can be fairly arbitrary strings,
but it is suggested that you stick with letters, digits, and underscores.
If an argument itself has a space character in it, then you have to enclose the argument in quotation marks or curly braces:
set a "p 4"
or
set a {p 4}
Note that, unlike other languages,
quotation marks do not differentiate string-literals from non-literals.
The two commands set b a
and set b "a"
have
identical meaning in Tcl/Tk.
To access the value of a variable, you must precede the name with a dollar-sign. Thus, after the commands
set a 4
set b $a
both a and b are assigned the value 4. The set command has the property
that in addition to setting the variable to the value, it also returns
the value (and in console mode, displays it on your console). Because
the QMG functions typically return enormous strings, QMG defines a
variant of "set" called gmset
which suppresses the display of the
answer on your console.
Another example of a command is the expr
command that
causes a string to be evaluated as an arithmetic expression, and the
value of that expression is returned. For example if you typed
set a 4
expr "$a + 19"
then the second line would return 23.
A second syntactic feature of Tcl/Tk is square-brackets. Square brackets invoke a function. Thus,
set a 4
set b [expr $a+19]
will set b to 23.
A final major syntactic feature is curly-braces. Curly braces
have several properties: like quotes, they suppress spaces as
separators. Unlike quotes, they can be nested.
In addition, unlike quotes, they also prevent
square brackets from being evaluated and dollar-sign substitution.
gmpolygon
and to
apply a transformation
gmapply
. Thus,
you would type:
gmset t [gmpolygon 3]
gmset t1 [gmapply {{1 1 0} {0 1 0}} $t]
Unforunately, the following will not work:
gmset t [gmpolygon 3]
set skewamount 1
gmset t1 [gmapply {{1 $skewamount 0} {0 1 0}} $t]
The reason this fails is that (as mentioned above) curly braces
prevent dollar-sign substitution, so this
statement would cause the string literal $skewamount to be passed
to the gmapply routine, but gmapply is expecting numbers. How do
you get around this problem? You need to use the list
instruction in Tcl:
gmset t [gmpolygon 3]
set skewamount 1
gmset t1 [gmapply [list [list 1 $skewamount 0] [list 0 1 0]] $t]
At this point you probably should get
a book to learn more! There is also information on the web.
Tcl include procedure and looping constructs to build arbitrarily complex programs. In addition, Tk makes it easy to attach a graphical user interface to Tcl scripts.
This documentation is written by Stephen A. Vavasis and is copyright (c) 1996 by Cornell University. Permission to reproduce this documentation is granted provided this notice remains attached. There is no warranty of any kind on this software or its documentation. See the accompanying file 'Copyright' for a full statement of the copyright.
Stephen A. Vavasis, Computer Science Department, Cornell University, Ithaca, NY 14853, vavasis@cs.cornell.edu