## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > expr

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    expr — 式の評価 Evaluate an expression
  構文 SYNOPSIS
  説明 DESCRIPTION
  被演算子 OPERANDS
  演算子 OPERATORS
    - + ~ !
    **
    * / %
    + -
    << >>
    < > <= >=
    == !=
    eq ne
    in ni
    &
    ^
    |
    &&
    ||
    x ? y : z
  MATH FUNCTIONS
  型､桁溢れ､精度 　 TYPES, OVERFLOW, AND PRECISION
  文字列演算 　 STRING OPERATIONS
  出来栄えの考慮 　PERFORMANCE CONSIDERATIONS
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS
  COPYRIGHT

### NAME

expr — 式の評価 Evaluate an expression

### 構文 SYNOPSIS

expr arg ?arg arg ...?

### 説明 DESCRIPTION

引数 arg を(その間に空白区切りを加えて)鎖状に繋ぎ､その結果を Tcl の式として評価し､その値を返す｡Tcl の式で使用できる演算子は､C言語の式で使用できる演算子の部分集合を含んでいる｡Tcl とC言語の両方共通の演算子は､ Tcl では､対応する C 言語の演算子と､同じ意味と優先順位を適用している｡式からは殆どの場合数値(整数値又は浮動少数値)が得られる｡譬えば､この式では Concatenates args (adding separator spaces between them), evaluates the result as a Tcl expression, and returns the value. The operators permitted in Tcl expressions include a subset of the operators permitted in C expressions. For those operators common to both Tcl and C, Tcl applies the same meaning and precedence as the corresponding C operators. Expressions almost always yield numeric results (integer or floating-point values). For example, the expression

    expr 8.2 + 6

評価して 14.2になる｡Tcl の式はC言語の式とは､被演算子が指定される方法で異なっている｡又､Tcl の式は非数値の被演算子や､文字列比較や､同様に､C言語には見られない幾つかの追加の演算子も運営している｡ 　　 evaluates to 14.2. Tcl expressions differ from C expressions in the way that operands are specified. Also, Tcl expressions support non-numeric operands and string comparisons, as well as some additional operators not found in C.

#### 被演算子 OPERANDS

Tcl の式は被演算子､演算子､括弧､コンマの組合せで構成される｡演算子､被演算子､括弧(又は命令)の間に空白が使われることもあるが; 式の実行命令からは無視される｡可能な限り被演算子は整数として解釈される｡整数は､十進数(通常の場合)､２進数(被演算子の先頭の２文字が0bの場合)､８進数(被演算子の先頭の２文字が 0o の場合)､１６進数(被演算子の先頭の２文字が 0x の場合)に指定される｡旧版のTcl との互換性を保つ為､被演算子の先頭の文字が 0 の場合に､第二番目の文字が o であってもなくても８進数が指定される｡被演算子が上述のどの整数の形式をも備えていない場合､可能であれば､浮動小数として扱おうとする｡浮動小数は十進数用の数字､小数点､指数表示の記号の文字 e や E ､符号の + や - を駆使して幾つかの書式のどれかにより指定できる｡譬えば､次のものは何れも適切な浮動少数数である: 2.1, 3., 6e4, 7.91e+16 ｡又､文字列の Inf と NaN は､浮動少数の値として認識され､又､どの文字も､大文字でも小文字でも利用できる｡数値の解釈が全くできない(註 数値や論理値でない全ての文字の被演算子は波括弧[訳註 {} ]か､引数符号[訳註 “” ]で括られねばならない)場合は､被演算子は､文字列のまま残される（そして､限定された演算子だけがそれに適用される）｡ A Tcl expression consists of a combination of operands, operators, parentheses and commas. White space may be used between the operands and operators and parentheses (or commas); it is ignored by the expression's instructions. Where possible, operands are interpreted as integer values. Integer values may be specified in decimal (the normal case), in binary (if the first two characters of the operand are 0b), in octal (if the first two characters of the operand are 0o), or in hexadecimal (if the first two characters of the operand are 0x). For compatibility with older Tcl releases, an octal integer value is also indicated simply when the first character of the operand is 0, whether or not the second character is also o. If an operand does not have one of the integer formats given above, then it is treated as a floating-point number if that is possible. Floating-point numbers may be specified in any of several common formats making use of the decimal digits, the decimal point ., the characters e or E indicating scientific notation, and the sign characters + or -. For example, all of the following are valid floating-point numbers: 2.1, 3., 6e4, 7.91e+16. Also recognized as floating point values are the strings Inf and NaN making use of any case for each character. If no numeric interpretation is possible (note that all literal operands that are not numeric or boolean must be quoted with either braces or with double quotes), then an operand is left as a string (and only a limited set of operators may be applied to it).

被演算子は次のどれかの方法で指定される: Operands may be specified in any of the following ways:

1. 整数又は浮動少数の数値として｡ As a numeric value, either integer or floating-point.

2. string is boolean により認識可能な何れかの形式を使用した論理値として｡ 　　 As a boolean value, using any form understood by string is boolean.

3. 通常の$ 記号を使う Tcl 変数として｡その変数の値が被演算子として使用される｡ As a Tcl variable, using standard $ notation. The variable's value will be used as the operand.

4. 二重引用附に括られた文字列として｡式解釈機構は引用附の中身の情報に基づいて､逆斜線処理と､変数置換と､命令置換を行い､その結果の値を被演算子として使用する｡ As a string enclosed in double-quotes. The expression parser will perform backslash, variable, and command substitutions on the information between the quotes, and use the resulting value as the operand

5. 波括弧内に括られた文字列として｡左波括弧と対応する右波括弧の間の文字列はどの様な置換もされずに被演算子として使用される｡ As a string enclosed in braces. The characters between the open brace and matching close brace will be used as the operand without any substitutions.

6. 角括弧で括られたTcl命令として｡その命令が実行され､その結果が被演算子として使用される｡ As a Tcl command enclosed in brackets. The command will be executed and its result will be used as the operand.

7. sin($x) の如く､その引数が上記の被演算子の為のどれかの形式を有する数学的函数として｡数学的函数が如何に扱われるかの議論は下記の MATH FUNCTIONS を参照されたい｡ 　　 As a mathematical function whose arguments have any of the above forms for operands, such as sin($x). See MATH FUNCTIONS below for a discussion of how mathematical functions are handled.

上述の置換が生じる時､(譬えば､引用附で括られた文字列)それは､式の指示により実行される｡しかし､式の処理機構が呼出される前に､命令解釈機構が､第１回目の置換を既に完了しているかもしれない｡後で論じる様に､通常は式を波括弧で括って､命令解釈機構による内容の置換を阻止しておくのが最善である｡ Where the above substitutions occur (e.g. inside quoted strings), they are performed by the expression's instructions. However, the command parser may already have performed one round of substitution before the expression processor was called. As discussed below, it is usually best to enclose expressions in braces to prevent the command parser from performing substitutions on the contents.

単純な式の例示例として､変数 a が値 3 ､変数 b が値 6を有すると仮定する｡すると以下の各行の左側の命令が各行の右側の値を生成する: For some examples of simple expressions, suppose the variable a has the value 3 and the variable b 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:

    expr {3.1 + $a}	6.1
    expr {2 + "$a.$b"}	5.6
    expr {4*[llength "6 2"]}	8
    expr {{word one} < "word $a"}	0

#### 演算子 OPERATORS

適正な演算子(殆どのものは tcl::mathop 名前空間でも使用できる;詳細は取扱説明書の mathop(n) を参照のこと)を以下に列挙する､優先順位毎にまとめ､順位が逓減する順に並べた: The valid operators (most of which are also available as commands in the tcl::mathop namespace; see the mathop(n) manual page for details) are listed below, grouped in decreasing order of precedence:

- + ~ !
  負の単項演算子､正の単項演算子､ビット演算のNOT､論理演算のNOT｡ 何れの演算子も文字列の被演算子には適用できない｡ビット演算のNOT演算子は整数にのみ適用できる｡ Unary minus, unary plus, bit-wise NOT, logical NOT. None of these operators may be applied to string operands, and bit-wise NOT may be applied only to integers.

**
  冪乗｡どのような数値の被演算子に関しても適正である｡ Tcl が処理できる最大冪乗値は､最初の数値[譯註 “底” のこと]が １ より大きい整数の場合は 268435455 である｡ Exponentiation. Valid for any numeric operands. The maximum exponent value that Tcl can handle if the first number is an integer > 1 is 268435455.

* / %
  乗算､除算､剰余｡何れの演算子も文字列の被演算子には適用できない､又､剰余演算子は整数にのみ適用できる｡剰余は常に除数と同じ符号を有し､絶対値が除数より小さい｡ Multiply, divide, remainder. None of these operators may be applied to string operands, and remainder may be applied only to integers. The remainder will always have the same sign as the divisor and an absolute value smaller than the absolute value of the divisor.

  整数に適用した時､除算演算子と剰余演算子は､等しい寸法で隣り合い重り合わず各断片の寸法が除数に等しい一連の断片の並びへの､数直線の分割操作であると看做せる､ここで断片はそれぞれが除数の寸法である; 除算の結果は被除数がその中に置く断片を識別している､又､残差の結果は､被除数がその中に置いている断片の位置を識別している｡その結果として､ “-57 / 10” の結果は-6であり､ “-57 % 10” は3 になる｡ When applied to integers, the division and remainder operators can be considered to partition the number line into a sequence of equal-sized adjacent non-overlapping pieces where each piece is the size of the divisor; the division result identifies which piece the divisor lay within, and the remainder result identifies where within that piece the divisor lay. A consequence of this is that the result of “-57 / 10” is always -6, and the result of “-57 % 10” is always 3.

+ -
  加算と減算｡どのような数値の被演算子にも適正である｡ Add and subtract. Valid for any numeric operands.

<< >>
  左シフトと右シフト｡整数の被演算子にのみ適正である｡右シフトは常に符号ビットを増殖しながら移動する｡[訳註 右シフトは計算機用機械語のArithmetic Shift Right に該当する] Left and right shift. Valid for integer operands only. A right shift always propagates the sign bit.

< > <= >=
  より小､より大､以下､以上､の論理値｡全ての演算子は条件が真なら1､偽なら0を返す｡これらの演算子は数値被演算子に限らず､文字にも適用でき､その場合､文字列比較が使われる｡ Boolean less, greater, less than or equal, and greater than or equal. Each operator produces 1 if the condition is true, 0 otherwise. These operators may be applied to strings as well as numeric operands, in which case string comparison is used.

== !=
  論理同値　非同値｡　各演算子は結果として 0/1 を生ずる｡全ての型の被演算子に適正である｡ Boolean equal and not equal. Each operator produces a zero/one result. Valid for all operand types.

eq ne
  論理的文字列同値､文字列非同値｡各演算子は結果として 0/1 を生ずる｡ 被演算子の型は文字列として解釈されるもののみ｡　　 Boolean string equal and string not equal. Each operator produces a zero/one result. The operand types are interpreted only as strings.

in ni
  包含リスト､非包含リスト｡各演算子は結果として 0/1 を生ずる｡第１引数は文字列､第２引数はTcl型リストとして扱う｡この in 演算子は第１引数が第２引数の要素であるか否かを示す;この ni 演算子はその結果の意味を逆転する｡ List containment and negated list containment. Each operator produces a zero/one result and treats its first argument as a string and its second argument as a Tcl list. The in operator indicates whether the first argument is a member of the second argument list; the ni operator inverts the sense of the result.

&
  ビット演算の論理積｡整数の被演算子にのみ適正である｡ Bit-wise AND. Valid for integer operands only.

^
  ビット演算の排他的論理和｡整数の被演算子にのみ適正である｡ Bit-wise exclusive OR. Valid for integer operands only.

|
  ビット演算の論理和｡整数の被演算子にのみ適正である｡ Bit-wise OR. Valid for integer operands only.

&&
  論理積｡両方の被演算子が共に非零の時に1を生じ､それ以外は0を生じる｡論理値と数値(整数又は浮動少数)被演算子にのみ適正である｡この演算子は遅延評価する； その結果を定めなければならない場合にのみ第二番目の被演算子を評価する｡ Logical AND. Produces a 1 result if both operands are non-zero, 0 otherwise. Valid for boolean and numeric (integers or floating-point) operands only. This operator evaluates lazily; it only evaluates its second operand if it must in order to determine its result.

||
  論理和｡両方の被演算子が共に零の時に1を生じ､それ以外は0を生じる｡論理値と数値(整数又は浮動少数)被演算子にのみ適正である｡この演算子は遅延評価する； その結果を定めなければならない場合にのみ第二番目の被演算子を評価する｡ Logical OR. Produces a 0 result if both operands are zero, 1 otherwise. Valid for boolean and numeric (integers or floating-point) operands only. This operator evaluates lazily; it only evaluates its second operand if it must in order to determine its result.

x ? y : z
  C言語の三項演算子｡もし x の評価結果が非零なら､ y の評価結果が､演算結果になる｡それ以外なら z の値が結果になる｡被演算子 x は論理値又は数値を有さねばならない｡この演算子は遅延実行する； y か z の内の一つのみを評価する｡ If-then-else, as in C. If x evaluates to non-zero, then the result is the value of y. Otherwise the result is the value of z. The x operand must have a boolean or numeric value. This operator evaluates lazily; it evaluates only one of y or z.

各演算子が生成する結果についての詳細はＣ言語の取扱説明書を参照されたい｡冪乗演算子は乗算や除算の様に型を伝播する､又､ pow 函数の出力(全ての型変換の後)と同じ結果になる｡冪乗演算以外の全ての二項演算子は同じ優先度の水準内で左から右にまとめる;冪乗演算は右から左にまとめる｡譬えば､次の命令は､ See the C manual for more details on the results 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 pow 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

    expr {4*2 < 7}

は､ 0 を返し､次は､ returns 0, while

    expr {2**3**2}

は､512を返す｡ returns 512.

&& と､ ||と､ ?: 演算子はC言語のものと同じ “遅延評価” 機能がある｡即ち､これらの被演算子は､結果を定める必要が無い場合は評価されずに済ます｡譬えば､次の命令では The &&, ||, and ?: operators have “lazy evaluation”, just as in C, which means that operands are not evaluated if they are not needed to determine the outcome. For example, in the command

    expr {$v?[a]:[b]}

$vの値によって､ “[a]” か “[b]” のどちらか片方だけが実際に評価される｡註意 しかしながら､これは式全体が波括弧で括られている場合のみ正しい､括らないと､Tcl解釈機構が expr 命令を起動する前に “[a]” と “[b]” の両方を評価してしまう｡ only one of “[a]” or “[b]” will actually be evaluated, depending on the value of $v. Note, however, that this is only true if the entire expression is enclosed in braces; otherwise the Tcl parser will evaluate both “[a]” and “[b]” before invoking the expr command.

#### MATH FUNCTIONS

式解釈機構が sin($x) の様な数学的函数に遭遇すると､呼出しを使って tcl::mathfunc 名前空間に入っている通常のTcl命令に置き換える｡式の処理課程は､譬えば: When the expression parser encounters a mathematical function such as sin($x), it replaces it with a call to an ordinary Tcl command in the tcl::mathfunc namespace. The processing of an expression such as:

    expr {sin($x+$y)}

の処理手順は次の処理と全く同じになる: is the same in every way as the processing of:

    expr {[tcl::mathfunc::sin [expr {$x+$y}]]}

それは更に､次の処理と同じである: which in turn is the same as the processing of:

    tcl::mathfunc::sin [expr {$x+$y}]

処理機構は名前空間中の函数解析の為の通常の規則を使って tcl::mathfunc::sin の捜索を行う｡ ::tcl::mathfunc::sin でも [namespacecurrent]::tcl::mathfunc::sin でも処理でき､他にもあるかもしれない(現在の namespace path の設定に依存する)｡ The executor will search for tcl::mathfunc::sin using the usual rules for resolving functions in namespaces. Either ::tcl::mathfunc::sin or [namespace current]::tcl::mathfunc::sin will satisfy the request, and others may as well (depending on the current namespace path setting).

ある種の数学函数は幾つかの引数を取り､ C 言語の様にコンマで区切られる｡そこで: Some mathematical functions have several arguments, separated by commas like in C. Thus:

    expr {hypot($x,$y)}

この様になる ends up as

    tcl::mathfunc::hypot $x $y

省略時設定で利用できる数学的函数については取扱説明書の mathfunc(n) の頁を参照されたい｡[訳註､引数の区切りは､expr はコンマ(,)､mathfuncは空白､従って後者の引数では"{*}$list"が使える] See the mathfunc(n) manual page for the math functions that are available by default.

#### 型､桁溢れ､精度 　 TYPES, OVERFLOW, AND PRECISION

整数を含む内部での計算は全て､その都度､ LibTomMath 多精度整数函数を呼出して実行されるので､全ての整数計算は正確に遂行される｡註意 Tclの8.5版より古い版では､整数計算は､C言語型長整数か Tcl_WideInt のいづれかで遂行され､それによる計算では､それぞれが有する桁溢れ範囲値に基づく､暗黙の切棄てが起る｡この様な暗黙の切捨てに依存したプログラムではそれが生じることが必要とされる位置で､明示的に int() か wide() 函数呼出しを追加することが必要になる｡ All internal computations involving integers are done calling on the LibTomMath multiple precision integer library as required so that all integer calculations are performed exactly. Note that in Tcl releases prior to 8.5, integer calculations were performed with one of the C types long int or Tcl_WideInt, causing implicit range truncation in those calculations where values overflowed the range of those types. Any code that relied on these implicit truncations will need to explicitly add int() or wide() function calls to expressions at the points where such truncation is required to take place.

浮動少数を含む内部での計算は全て､C型２倍精度で行われる｡文字列から､浮動少数への変換の際に､桁数の桁溢れが検知されると適宜､倍精度の Inf 又は -Inf になる｡浮動小数の(オーバー･フローとアンダー･フロー)桁溢れは一般に非常に信頼できるハードウェアによって運営された程度に検出される｡　　 All internal computations involving floating-point are done with the C type double. When converting a string to floating-point, exponent overflow is detected and results in the double value of Inf or -Inf as appropriate. Floating-point overflow and underflow are detected to the degree supported by the hardware, which is generally pretty reliable.

整数と､浮動少数と､文字列被演算子の為の内部表現の間の型変換は､必要な都度自動的に実行される｡数学的計算に関して､整数が､何か浮動少数が現れる迄使用され､その後は浮動少数が使用される｡譬えば､ 　　 Conversion among internal representations for integer, floating-point, and string operands is done automatically as needed. For arithmetic computations, integers are used until some floating-point number is introduced, after which floating-point is used. For example,

    expr {5 / 4}

からは1が返り､そして 　　 returns 1, while

    expr {5 / 4.0}
    expr {5 / ( [string length "abcd"] + 0.0 )}

何れも1.25が返る｡浮動少数値は常に “.” 又は “e” と共に返り､見掛けが整数値と異なる｡譬えば､ both return 1.25. Floating-point values are always returned with a “.” or an “e” so that they will not look like integer values. For example,

    expr {20.0/5.0}

からは4 でなく4.0が返る｡ returns 4.0, not 4.

#### 文字列演算 　 STRING OPERATIONS

文字列の値は比較演算子の被演算子として使用できる､しかし､eq と ne 演算子以外の式評価機構は可能な限り､整数又は浮動少数として比較しょうとする｡もし､比較対象の被演算子の一つが文字列で､他方が数値の時､文字列被演算子との比較の為に､数値被演算子の正準文字表現が生成される｡整数値の正準文字表現は十進文字列書式である｡浮動少数への正準文字表現はTclの format 命令で規定された %g 書式で生成される｡譬えば､ String values may be used as operands of the comparison operators, although the expression evaluator tries to do comparisons as integer or floating-point when it can, i.e., when all arguments to the operator allow numeric interpretations, except in the case of the eq and ne operators. If one of the operands of a comparison is a string and the other has a numeric value, a canonical string representation of the numeric operand value is generated to compare with the string operand. Canonical string representation for integer values is a decimal string format. Canonical string representation for floating-point values is that produced by the %g format specifier of Tcl's format command. For example, the commands

    expr {"0x03" > "2"}
    expr {"0y" > "0x12"}

両方とも1を返す｡最初の比較は整数比較が使われ､後者では文字列比較が使われる｡可能な限り値を数値として扱うTclの傾向を考慮すると､文字列での比較をしたい場合や､被演算子の値が変わり得る場合には== のような演算子の使用は避けるほうが賢明であり､この様な場合 eq や ne 演算子を使用するか､代わりに string 命令を使用する方が好ましい｡ both return 1. The first comparison is done using integer comparison, and the second is done using string comparison. Because of Tcl's tendency to treat values as numbers whenever possible, it is not generally a good idea to use operators like == when you really want string comparison and the values of the operands could be arbitrary; it is better in these cases to use the eq or ne operators, or the string command instead.

### 出来栄えの考慮 　PERFORMANCE CONSIDERATIONS

最速且つ､最小の記憶量を実現するには式を波括弧で括られたい｡これによりTclのバイト翻訳機能は最善の実行用コードを生成する｡ Enclose expressions in braces for the best speed and the smallest storage requirements. This allows the Tcl bytecode compiler to generate the best code.

先に述べた様に､式は二度置換される：一度はTcl解釈機構で､もう一度はexpr 命令で｡譬えば As mentioned above, expressions are substituted twice: once by the Tcl parser and once by the expr command. For example, the commands

    set a 3
    set b {$a + 2}
    expr $b*4

は､4の倍数ではなく11を返してくる｡この場合､Tcl解釈機構が最初に変数 b を “$a + 2” に置換える｡次に expr 命令が式 “$a + 2*4” を評価する｡ return 11, not a multiple of 4. This is because the Tcl parser will first substitute “$a + 2” for the variable b, then the expr command will evaluate the expression “$a + 2*4”.

殆どの式では第２回目の置換は必要ではない｡式は波括弧で括られても括られなくても､その変数と命令の置換により､それ自身が置換を要しないような､数や文字列が生成する｡しかしながら､少数の括られていない式が２度の置換を要するが故に､その状態を処理する為に､バイト翻訳機能は追加的な命令を発する必要がある｡命令置換を含み波括弧で括られていない式が､最も効率の悪い実行コードを(バイト翻訳機能に)要求する｡この様な式はその式が実行される度に､新しく実行用コードを生成することで実現される筈である｡ 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.

それ以外は恒常な式の広い文脈の内部に､非恒常な文字式を入れ込むことが必要な場合､最も効果的な技巧は変動部位を､少なくとも外側部位の機械語翻訳が可能な様に､再帰的な expr の内部に入れることである､但し､それは､変動部位はそれ自身分離した式として評価できなければならないことを意味する｡ 斯くて､この実施例内の結果は 20 であり､外側の式は､完全に､高速域に記憶されたバイト翻訳機能の恩恵を得ている｡ 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 expr, 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.

    set a 3
    set b {$a + 2}
    expr {[expr $b] * 4}

函数や演算子の置換を可能にするには数式が波括弧で括られないとき､代りに､ mathfunc(n) や mathop(n) 取扱い説明書の頁内に説明されている命令を直接使用することを考慮されたい｡ When the expression is unbraced to allow the substitution of a function or operator, consider using the commands documented in the mathfunc(n) or mathop(n) manual pages directly instead.

### 用例 EXAMPLES

“興味深い” 数学的函数を計算する手続函数を定義する: Define a procedure that computes an “interesting” mathematical function:

    proc tcl::mathfunc::calc {x y} {
        expr { ($x**2 - $y**2) / exp($x**2 + $y**2) }
    }

極座標を直交座標に変換する: Convert polar coordinates into cartesian coordinates:

    # convert from ($radius,$angle)
    set x [expr { $radius * cos($angle) }]
    set y [expr { $radius * sin($angle) }]

直交座標を極座標に変換する: Convert cartesian coordinates into polar coordinates:

    # convert from ($x,$y)
    set radius [expr { hypot($y, $x) }]
    set angle  [expr { atan2($y, $x) }]

二つの文字列の値の相互の関係を記述する内容を印刷する: Print a message describing the relationship of two string values to each other:

    puts "a and b are [expr {$a eq $b ? {equal} : {different}}]"

環境変数が充分に定義され､且つ論理的真値の値が設定されているかの変数を設定する: 　　　 Set a variable to whether an environment variable is both defined at all and also set to a true boolean value:

    set isTrue [expr {
        [info exists ::env(SOME_ENV_VAR)] &&
        [string is true -strict $::env(SOME_ENV_VAR)]
    }]

0～99 の両端を含む範囲の整数の乱数を発生する: Generate a random integer in the range 0..99 inclusive:

    set randNum [expr { int(100 * rand()) }]

### SEE ALSO

array, for, if, mathfunc, mathop, namespace, proc, string, Tcl, while

### KEYWORDS

arithmetic, boolean, compare, expression, fuzzy comparison

### COPYRIGHT

Copyright © 1993 The Regents of the University of California.
Copyright © 1994-2000 Sun Microsystems Incorporated.
Copyright © 2005 Kevin B. Kenny <kennykb@acm.org>. All rights reserved.
Copyright © 1993 The Regents of the University of California.
Copyright © 1994-2000 Sun Microsystems, Inc.
Copyright © 2005 Kevin B. Kenny <kennykb(at)acm.org>. All rights reserved