s s (calc-store
) コマンドは、
スタック top の値を指定した変数にストアします。
このコマンドはプロンプトを出して、変数名の入力を促します。
このとき数字キーを押すと、ただちに
var-q0
〜 var-q9
のクイック変数にストアされます。
それ以外なら任意の変数名を指定できます。
プリフィックス `var-' はユーザーの便宜のために自動的に付加されます。
式中に出てくる変数(`a+q2'のような)にも、
`var-' が(見えないがちゃんと)自動付加されているので、
普通は `var-' のことを忘れてしまっても大丈夫です。
プリフィックスの唯一の目的は、
他の Emacs パッケージの変数を偶然に壊してしまう恐れを無くするためです。
任意の Lisp 変数に(マジで?)ストアしたい場合は、
`var-' をバックスペースで消してください。
s s コマンドは、ストアした値をスタックに残します。
これに対し s t (calc-store-into
) コマンドは、
スタックから値を取除いて変数にストアします。
スタック top の値が、
左辺に変数がひとつの方程式 `a = 7' または割付け `a := 7' であるとき、
s s RET や s t RET とタイプすると、
デフォルトで Calc はその変数にその値を割付けます。
この例では、変数 `a' に値 7 がストアされます。
(このとき変数プロンプトに対して変数名を入力すると、
スタックの値全体が---たとえ式であろうが---ストアされます。
例えばスタック値が `a := 7' で `s s b RET' と打つと、
変数 b
に `a := 7' がストアされます。)
実際、スタック値は、 それぞれ固有の変数が左辺についた方程式や割付け式のベクトルでもかまいません。 デフォルトの動作は、 それぞれの右辺の値を対応する左辺の変数に、 同時にストアします。
s s や s t コマンドでは、 例えば s s foo = 7 のように、 プロンプトに対して方程式や割付け式を直接打込むこともできます。 この場合、= や := の右辺値が evaluate されて、 その結果が変数にストアされます。 スタックから値は取得されません。 このような使い方をするときは、s s も s t も同等です。
プリフィックスとしての s と t には、 直後に数字キーを付けることができます。 s 9 は s s 9 と同じ、 t 9 は s t 9 と同じです。 (t プリフィックスは他にトレイルや日時関連コマンドでも使用します。)
他にも「演算してストアする」コマンドがあります。 例えば s + は、 スタックから値を取除いて、指定された変数の中に足し込みます。 他には s -, s *, s /, s ^, それから s | (ベクトル連結)があります。 さらに、s n (変数値を正負反転), s & (変数値の逆数) そして、s [ (デクリメント), s ] (インクリメント) があります。
演算ストアコマンドはどれも、インバース・フラグを付けると オペランドの順序が逆になります。 変数の内容を v、スタックから取得する値を a とすると、 s - は v := v - a を実行しますが、 I s - は v := a - v を実行します。 I s * は一見無意味に見えますが、行列の掛算には有用です。 実際、演算ストアコマンドはどれも、 前後それぞれ有意義に作用するようにデザインされた式を使います。
コマンド 正作用 インバース修飾 s + v := v + a v := a + v s - v := v - a v := a - v s * v := v * a v := a * v s / v := v / a v := a / v s ^ v := v ^ a v := a ^ v s | v := v | a v := a | v s n v := v / (-1) v := (-1) / v s & v := v ^ (-1) v := (-1) ^ v s [ v := v - 1 v := 1 - v s ] v := v - (-1) v := (-1) - v
最後の4例は、式中の 1 の位置に数値接頭引数が代入されます。 例えば、M-2 s ] は変数を2だけインクリメントし、 M-2 I s ] は `(-2) - v' を変数にストアします。
最初の6種類の演算ストアコマンドは、 s t +, s t -, ... とタイプしても同じです。 同様に、s s +, s s -, ... も同じ演算をしますが、 取得したスタック値 a をスタックに残します。
演算ストアコマンドはどれも、 ユーザーの参考として変数の新しい値をトレイルに申告します。 変数があらかじめオペランドとなる値を持っていなかった場合は エラーを出します。 デフォルト簡単化が止められていた場合、演算ストアはその機能を一時的に発動して、 数値引数にのみ利用します(つまり、一時的に m N コマンドを実行します)。 簡単化モード 参照 。 これらのコマンドがトレイルに大きなベクトルを置くときは 常に略記(t .)モードを使います。
s m コマンドは、 任意の Calc 関数を(スタックではなく)変数値に作用させる一般的な方法です。 これは V M, V R, ... 等に類似した「マッピング」コマンドです。 マッピングコマンドに関数を指定する方法は、Reducing and Mapping Vectors 参照 。 基本的に、普通に関数を呼出す Calc コマンドを押すだけです。 例えば、s m n は n (正負反転)コマンドを変数値に適用するので、 s n と同等です。 また、s m Q は変数にストアされた値の平方根をとり、 s m v v は v v を変数にストアされたベクトルに作用させて それを反転し、 s m H I S は変数内容のハイパボリック・アークサインをとります。
マッピングした関数が2つ以上の引数をとるときは、 変数に元からストアされていた値が第1引数となり、 追加の引数はスタックから取得されます。そのため、 a をスタックに置いて s m - とすると、 ちょうど s - と同じように、 v - a が計算されます。 インバース・フラグを付けると、 変数のオリジナル値が、第1引数ではなく最後の引数として利用されます。 それで、I s m - は I s - と同じ作用をします。
s x (calc-store-exchange
)コマンドは、
変数の内容とスタックtop の内容を交換します。
もちろん、変数にはあらかじめ何かがストアされてないと、
このコマンドは動作しません。
s x のプロンプトに対し、方程式か割付け式で答えることができます。 s x a=6 とすると、スタックからは値を取得せず、 そのかわり`a' の元の値をスタックに push して、 `a' には新しく 6 がストアされます。
何かストアされる以前の変数は"void(空)"と言って、
まったく何の値も入っていません。
そのような変数が代数式の中に使われた場合、
ユーザーが = (calc-evaluate
) を押しても評価(evaluate)されず、
そのまま残されます。
s u (calc-unstore
) コマンドは、
任意の変数を void 状態に戻します。
若干の「特殊定数」がデフォルトで既に定義されていて、
pi
, e
, i
, phi
, gamma
です。
これらの変数はユーザーが自由にアンストアできるし、
新たな値をストアすることもできます。
ただし Calc の代数操作関数群は、
「特殊定数には標準の値が入っている」とみなしてしまう恐れがあります。
ユーザーが特殊定数または他の特殊変数 inf
, uinf
, nan
(これらは通常 void です)を変更した場合、Calc は警告を表示します。
「注意」
var-pi
には実際に 3.14159265359 がストアされている訳ではありませんが、
特別な仕掛けをもつ魔法の値がストアしてあって、
π
を現行精度で計算(evaluate)します。
同様に var-e
, var-i
, var-phi
も、
現在精度や極座標モードに合わせて計算(evaluate)されます。
もし pi
を呼出して再ストア(書戻)したら、この仕掛けは失われてしまいます。
s c (calc-copy-variable
) コマンドは、
ある変数にストアされた値を他の変数にコピーします。
これは s r と s t を連続して行う操作に比較して、
2つの重要な点で異なります。
第1に値がスタックに載らないので、丸められてしまったり、evaluate されたり、
いかなる簡単化もされることがありません。現行精度への丸めすら受けません。
第2に、 var-e
のような変数の「魔法の」内容も、
このコマンドでコピーできます。
たった今 var-e
を空にしたいが、
あとで元に戻したいと思う場合もあるでしょう。
s c コマンドは、このような魔法の値を操作する、唯一の手段です。
Go to the first, previous, next, last section, table of contents.
利用度数