Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | General improvements to the expr manpage |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | core-8-6-branch |
Files: | files | file ages | folders |
SHA3-256: |
965384cf1dda313c8e9ef5625960522d |
User & Date: | dkf 2019-06-10 19:43:59.602 |
Context
2019-06-11
| ||
15:31 | Fix [25deec4e46]: Tcl fails to compile with icc due to typedef conflict check-in: c6c21c7e4c user: jan.nijtmans tags: core-8-6-branch | |
2019-06-10
| ||
20:02 | merge more expr doc tweaks check-in: 6047e60fec user: dkf tags: core-8-branch | |
19:43 | General improvements to the expr manpage check-in: 965384cf1d user: dkf tags: core-8-6-branch | |
19:27 | General improvements to the expr manpage check-in: d10fd17e1d user: dkf tags: core-8-5-branch | |
18:44 | More localized documentation of lazy operators. check-in: 6171bb4522 user: dgp tags: core-8-6-branch | |
Changes
Changes to doc/expr.n.
︙ | ︙ | |||
102 103 104 105 106 107 108 | For some examples of simple expressions, suppose the variable \fBa\fR has the value 3 and the variable \fBb\fR has the value 6. Then the command on the left side of each of the lines below will produce the value on the right side of the line: .PP .CS | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | For some examples of simple expressions, suppose the variable \fBa\fR has the value 3 and the variable \fBb\fR has the value 6. Then the command on the left side of each of the lines below will produce the value on the right side of the line: .PP .CS .ta 9c \fBexpr\fR 3.1 + $a \fI6.1\fR \fBexpr\fR 2 + "$a.$b" \fI5.6\fR \fBexpr\fR 4*[llength "6 2"] \fI8\fR \fBexpr\fR {{word one} < "word $a"} \fI0\fR .CE .SS OPERATORS .PP |
︙ | ︙ | |||
223 224 225 226 227 228 229 230 231 232 233 234 235 236 | produced by each operator. The exponentiation operator promotes types like the multiply and divide operators, and produces a result that is the same as the output of the \fBpow\fR function (after any type conversions.) All of the binary operators but exponentiation group left-to-right within the same precedence level; exponentiation groups right-to-left. For example, the command .PP .CS \fBexpr\fR {4*2 < 7} .CE .PP returns 0, while .PP .CS | > | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | produced by each operator. The exponentiation operator promotes types like the multiply and divide operators, and produces a result that is the same as the output of the \fBpow\fR function (after any type conversions.) All of the binary operators but exponentiation group left-to-right within the same precedence level; exponentiation groups right-to-left. For example, the command .PP .PP .CS \fBexpr\fR {4*2 < 7} .CE .PP returns 0, while .PP .CS |
︙ | ︙ | |||
260 261 262 263 264 265 266 | and .QW \fB[b]\fR before invoking the \fBexpr\fR command. .SS "MATH FUNCTIONS" .PP When the expression parser encounters a mathematical function such as \fBsin($x)\fR, it replaces it with a call to an ordinary | | | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | and .QW \fB[b]\fR before invoking the \fBexpr\fR command. .SS "MATH FUNCTIONS" .PP When the expression parser encounters a mathematical function such as \fBsin($x)\fR, it replaces it with a call to an ordinary Tcl command in the \fBtcl::mathfunc\fR namespace. The processing of an expression such as: .PP .CS \fBexpr\fR {sin($x+$y)} .CE .PP is the same in every way as the processing of: |
︙ | ︙ | |||
392 393 394 395 396 397 398 | .CS set a 3 set b {$a + 2} \fBexpr\fR $b*4 .CE .PP return 11, not a multiple of 4. | | > | | > > > > > > > > > > > > > > > > | 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | .CS set a 3 set b {$a + 2} \fBexpr\fR $b*4 .CE .PP return 11, not a multiple of 4. This is because the Tcl parser will first substitute .QW "\fB$a + 2\fR" for the variable \fBb\fR, then the \fBexpr\fR command will evaluate the expression .QW "\fB$a + 2*4\fR" . .PP Most expressions do not require a second round of substitutions. Either they are enclosed in braces or, if not, their variable and command substitutions yield numbers or strings that do not themselves require substitutions. However, because a few unbraced expressions need two rounds of substitutions, the bytecode compiler must emit additional instructions to handle this situation. The most expensive code is required for unbraced expressions that contain command substitutions. These expressions must be implemented by generating new code each time the expression is executed. .PP If it is necessary to include a non-constant expression string within the wider context of an otherwise-constant expression, the most efficient technique is to put the varying part inside a recursive \fBexpr\fR, as this at least allows for the compilation of the outer part, though it does mean that the varying part must itself be evaluated as a separate expression. Thus, in this example the result is 20 and the outer expression benefits from fully cached bytecode compilation. .PP .CS set a 3 set b {$a + 2} \fBexpr\fR {[\fBexpr\fR $b] * 4} .CE .PP When the expression is unbraced to allow the substitution of a function or operator, consider using the commands documented in the \fBmathfunc\fR(n) or \fBmathop\fR(n) manual pages directly instead. .SH EXAMPLES .PP Define a procedure that computes an .QW interesting |
︙ | ︙ |