Go to the first, previous, next, last section, table of contents.


Evaluates-To 演算子

特別な代数記号 `=>'evaluates-to 演算子として知られています。 (Pascal や TeX のような他の言語モードでは、 evalto 関数呼出しとして登場します。) これは2項演算子で、右辺は省略できますが、左辺と右辺に引数をもちます。

`a => b' のような式は、 Calc によって次のように evaluate されます。 第1に、a は簡単化されたり、どのような変更もされません。 直前の b の値は捨てられます。 そして、a がコピーされ、= コマンドのように、 現行モードとストアされた変数値に基づいて evaluate されます そしてその結果は、b の新しい値として導入されます。

例えば、`2 + 3 => 17' と入力したとしましょう。 右辺の 17 は無視され、左辺の引数は evaluate 前の形式で残されます。 その結果、式 `2 + 3 => 5' が得られます。

`=>' 式は、代数的入力を使って直接打込むこともできるし (この場合、右辺を打込んでもどうせ直後に計算結果で置換されるので、 たいてい省略されます)、 s = (calc-evalto) コマンドを使う方法もあります。 このコマンドは、スタックから a を取って `a => b' を生成します。

Calc はスタックにある全ての `=>' 演算子を追跡管理していて、 それらの値に影響しそうな何らか(つまりモード設定や変数の値)の変更があるたびに 再計算します。 この動的リンクは `=>' 演算子が式の最上位にあるときか、 最上位がベクトルの場合はその要素式の最上位にあるときに有効です。 例えば、`2 + (a => 17)' をスタックに push すると、 入力したときに 17 は `a' の値に置換えられますが、 そのあとで `a' の値が変更されても、 `=>' 演算子が足し算の下位に埋れているので 動的更新はされません。 しかしながら、`=>' 演算子のベクトルは再計算されるので、 `[a =>, b =>, c =>]' のようなベクトルを push して 目下必要な変数の手軽な表示板を作ると便利です。 (すこし違う形式の表示をしますが、`[a, b, c] =>' を使っても同様です。 お好みで選択してください。)

m C (calc-auto-recompute) コマンドは、 この自動再計算機能を On/Off します。 この機能を止めた場合は、スタック上の `=>' 演算子が動的に更新されないので、 = を押すなどして明示的に再計算しなければなりません。 自動再計算を一時的に切ることは、 いくつかまとめて変更してから `=>' を調べる場合の時間節約になります。

多くのコマンドは、`=>' 演算子に対して無力です。 例えば与式が `x + 2 => 17' のとき、 1 + をタイプしても `x + 3 => 18' にはなりません。 `=>' 演算子の左辺に対して操作したい場合は、 j 1 (これは数字の「イチ」)を押して左辺をセレクションし、 所望のコマンドを実行し、最後に j u でセレクションを解除します。

`=>' 演算子が計算される際、 簡単化モードも含めた全ての現行モードが適用されます。 式 `x + y + x' は Calc のデフォルト簡単化では扱われないが、 a s コマンドはよりシンプルな`y + 2 x' にまとめることを 思い返してください。 あるいは m A をタイプして、代数簡単化モードを起動しておき、 全ての計算結果に a s と同じ事を適用する手もあります。 もし `x + y + x =>' を普通に入力したら、 その結果は `x + y + x => x + y + x' になります。 代数簡単化モードを起動すると、これが `x + y + x => y + 2 x' に変ります。 しかしながら、単に a s を押しても `x + y + x => x + y + x' に変化はありません。 なぜなら右辺は左辺とモード設定にのみ依存し、 左辺は a s のようなコマンドの影響を受けないからです。

"let"コマンド(s l) は、`=>' 演算子との間で面白い相互作用をします。 s l コマンドは、スタック top の値を指定の変数に一時的に代入した状態で スタックの2番目のエントリを evaluate します。 ご高察のとおり、もしエントリが `=>' 演算子だったら、 その右辺は一時的な変数値に応じた値を表示します。 実際、スタック上の `=>' のうち、 その指定変数を参照しているものは全て更新されます。 しかしこの変更は一時的なもので、 それらのスタックエントリに影響する次のコマンドは、 エントリを元の値に戻してしまいます。

2:  a => a             2:  a => 17         2:  a => a
1:  a + 1 => a + 1     1:  a + 1 => 18     1:  a + 1 => a + 1
    .                      .                   .

                           17 s l a RET        p 8 RET

ここで p 8 コマンドは現行精度を変更したので、 `=>' 式は"let"の影響が消去った条件で再計算されました。 d SPC (calc-refresh) コマンドは、 スタックの `=>' 演算子を副作用なしに再計算する手軽な方法です。

憑依モードもまた `=>' 演算子を利用します。 憑依モードでは、`=>' 演算子の左辺が `:=' 演算子によって割付けられた変数を、 ファイル内の何処にあろうと参照します。 割付け演算子 `a := 17' はそれ自身は実際何もしませんが、 憑依モードは割付を認識して、一種のファイルローカルな変数定義として記憶します。 `:=' 演算子を入力するには、代数的入力するか、 s : (calc-assign) [assign] コマンドを使って 変数と値をスタックから取り、 割付け式に変換することもできます。

TeX 言語出力に登場する `=>' については、TeX Language Mode 参照 。 eqn モードは、`=>' と類似の処理をします。


Go to the first, previous, next, last section, table of contents.     利用度数