See Also edit
- Math Operators as Commands
- additional discussion
- tcl::mathfunc
- a closely-related feature that exposes math functions, as opposed to math operators, as Tcl commands.
Documentation edit
Description edit
AMG: The following table lists all commands (operators) in this namespace and defines their behavior by showing their expression equivalents. Parentheses are used to indicate associativity.| Operation or test | Cmd | 0 | 1 | 2 | 3 or more arguments |
|---|---|---|---|---|---|
| Bitwise negation | ~ | err | ~a | err | err |
| Logical negation | ! | err | !a | err | err |
| Arithmetic negation | - | err | -a | ||
| Addition | + | 0 | a | a+b | ((a+b)+c)+... |
| Multiplication | * | 1 | a | a*b | ((a*b)*c)*... |
| Shift left | << | err | err | a<<b | err |
| Exponentiation | ** | 1 | a | a**b | a**(b**(c**...)) |
| Subtraction | - | a-b | ((a-b)-c)-... | ||
| Division | / | err | 1./a | a/b | ((a/b)/c)/... |
| Remainder | % | err | err | a%b | err |
| Arithmetic shift right | >> | err | err | a>>b | err |
| Bitwise and | & | -1 | a | a&b | ((a&b)&c)&... |
| Bitwise inclusive or | | | 0 | a | a|b | ((a|b)|c)|... |
| Bitwise exclusive or | ^ | 0 | a | a^b | ((a^b)^c)^... |
| Numeric equality | == | 1 | 1 | a==b | ((a==b)&&(b==c))&&... |
| String equality | eq | 1 | 1 | a eq b | ((a eq b)&&(b eq c))&&... |
| Numeric inequality | != | err | err | a!=b | err |
| String inequality | ne | err | err | a ne b | err |
| List membership | in | err | err | a in b | err |
| List non-membership | ni | err | err | a ni b | err |
| Strict increasing order | < | 1 | 1 | a<b | ((a<b)&&(b<c))&&... |
| Increasing order | <= | 1 | 1 | a<=b | ((a<=b)&&(b<=c))&&... |
| Strict decreasing order | > | 1 | 1 | a>b | ((a>b)&&(b>c))&&... |
| Decreasing order | >= | 1 | 1 | a>=b | ((a>=b)&&(b>=c))&&... |
% expr {1==1 && [puts hello] eq ""}
hello
1
% expr {1==0 && [puts hello] eq ""}
0
% expr {1==0 || [puts hello] eq ""}
hello
1
% expr {1==1 || [puts hello] eq ""}
1Shift right is arithmetic, not bitwise, meaning that the sign bit is unchanged by the operation. For two's-complement machines, arithmetic and bitwise shift left produce the same results.A simple example, because I couldn't immediately work out the incantation to make mathops visible. Note that functions and operators come from different namespaces:
namespace import ::tcl::mathop::* namespace import ::tcl::mathfunc::* puts [* [sqrt 49] [+ 1 2 3]]Alternatively:
namespace path {tcl::mathop tcl::mathfunc}
puts [* [sqrt 49] [+ 1 2 3]]There are better examples of the use of mathop scattered through the wiki; somebody should add links to some of the ones less obvious to non-lispers!AMG: You can also use [namespace path ::tcl::mathop] to add to the namespace search path.RS 2008-09-17: Should you only want to import the * multiplication operator, escape it with backslash, to distinguish from "*" meaning "all":
% namespace import tcl::mathop::\\* % + 2 3 invalid command name "+" % * 2 3 6


