以下のコマンドおよび代数関数は真/偽値を返します。
ここで 1 は「真」を表し、0 は「偽」を表します。
(書替え規則の条件部分や、Z [ Z ] 制御構文のように)
真理値が要求される局面では、
ゼロでない値はすべて「真」を意味するものとして受け入れられます。
(具体的には、dnonzero
が 1 を返すものは「真」であり、
dnonzero
が 0 を返すか判断できないものは「偽」と見なされます。
注意: Z [ Z ] は条件が真であることが確実な場合に
"then"部分を実行しますが、
a = b のような必ずしも真と言えない条件では、
(たとえ真の可能性があろうとも)
"else"部分が実行されます。
? :
や &&
のような、条件を引数として持つ代数関数は、
確かに真、確かに偽と言えない場合には評価されずに残ります
宣言 参照 。)
a = (calc-equal-to
) コマンドや `eq(a,b)' 関数
(代数式中では `a = b' or `a == b' と書かれます)は、
a と b が等しい(表現が等しいか数値が等しい)ならば真です。
(従って、整数 1 と浮動小数の 1.0 は等しいと見なされます。)
a と b の同値性が決定できない場合、
その比較はシンボル形式のまま残されます。
(注)コマンドとしての動作は、この演算はスタックから 2項を POP し、
1個の 1 または 0 を PUSH するか、
同値性が決定できない場合は式 `a = b' をPUSH します。
Calc の多くのコマンドは、`=' 式を 方程式 として認識します。
例えば a S (calc-solve-for
) コマンドは、
方程式を変形して与えられた変数について解きます。
a M (calc-map-equation
) は等式の両辺に任意の関数を作用させます。
例えば 2 a M * は、等式の両辺に 2 を掛けます。
(注)単に 2 * とするだけではそうならず、
`2 (a = b)' になってしまいます。
これは等式が真なら 2、偽なら 0 という意味です。
3個以上の引数をとる eq
関数
(例えば、C-u 3 a = や `a = b = c')は、
全ての引数の同値性をテストします。
代数式表記における `=' 演算子の特異性は、
それが右結合でも左結合でもない点であって、
`a = b = c' は、`(a = b) = c' や `a = (b = c)' と異なります
(後の例におけるカッコ内の評価結果は 1 か 0 で、それと他の変数が比較されます)。
a # (calc-not-equal-to
) コマンドや
`neq(a,b)' 関数、`a != b' 式は、
a と b が等しくない場合に真です。
これも 3つ以上の引数を取ることができ、
`a != b != c != d' は a, b, c, d の
全てが異なるかどうかをテストします。
a < (calc-less-than
) [`lt(a,b)' or `a < b' 式] は、
a が b より小さいとき真です。
よく似た関数に、
a > (calc-greater-than
) [`gt(a,b)' or `a > b' 式],
a [ (calc-less-equal
) [`leq(a,b)' or `a <= b' 式],
a ] (calc-greater-equal
) [`geq(a,b)' or `a >= b' 式]
があります。
lt
のような不等式関数は 2引数しか取らないので、
式 `a <= b < c' は区間型式による同等な表現
`b in [a .. c)' に変換されます。
(下記 in
の記述参照。)
`<' と `<=' の全4種の組合せ(区間両端の開閉に対応)が許されます。
また、`>' と `>=' の全4種の組合せも許されます。
`a < b < c < d' のような 4引数構文や、
`a < b = c'のような混合は許されません。
a . (calc-remove-equal
) [rmeq
] コマンドは、
スタック先頭の等式や不等式の右辺を抽出します。
ベクトルの要素ごとにも作用します。
例えば、`[x = 2.34, y = z / 2]' がスタックにあれば、
a . は `[2.34, z / 2]' を生成します。
特別なケースとして、右辺が変数で左辺が数値(`2.34 = x'のような)の場合、
Calc は右辺ではなく左辺を残します。
このコマンドは、割付け `x := 2.34' においても等式のときと同様に作用し、
常に右辺を取出します。また `=>' (evaluates-to) 演算子に対しては、
常に左辺を抽出します。
a & (calc-logical-and
) [`land(a,b)' or `a && b'] 関数は、
引数の両方が真のとき関数値は真、つまり非ゼロ値になります。
この場合、結果は a か b が勝手に選ばれます。
どちらかの値がゼロ値の場合、結果もゼロです。
それ以外の場合、式はシンボル形式のまま残されます。
a | (calc-logical-or
) [`lor(a,b)' or `a || b'] 関数は、
引数のどちらかあるいは両方が真の場合、真(非ゼロ)になります。
結果はどちらか非ゼロ値のほうが選ばれ、
両者とも非ゼロの場合はどちらかが勝手に選ばれます。
a も b も両方ゼロなら、結果もゼロです。
a ! (calc-logical-not
) [`lnot(a)' or `! a'] 関数は、
a が偽(ゼロ値)のとき真で、a が真(非ゼロ)なら偽です。
a が数値でない場合はシンボル形式のまま残されます。
a : (calc-logical-if
)
[`if(a,b,c)' or `a ? b : c'] 関数は、
a が非ゼロなら b に等しく、
ゼロなら c に等しくなります。
a が数値でない場合、テストはシンボル形式のまま残され、
b も c も評価されません。
代数式において、これは Calc の少数の例外関数のひとつで、
関数自体が評価されるときにその引数が自動評価されません。
これ以外には lambda
, quote
, condition
があります。
ちょっと意外で注意すべき点は、 式 `a?3:4' は `3:4' の部分が分数と解釈されてしまい、 3つの分離した引数と見られないのでうまく動きません。 `a ? 3 : 4' か `a?(3):4' のようにタイプすると動きます。
特別なケースで、a をベクトルに評価したら、 b と c の両方が評価されます。 結果は a と同じサイズのベクトルで、 その要素は a の各要素がゼロか非ゼロかに応じて、 b と c の対応する要素から選ばれます。 b と c はそれぞれ、 a と同サイズのベクトルでなければならないか、 あるいは非ベクトルです。 非ベクトルのときは a の全要素に対応します。 (訳注: if([1, 0, 1, 0], [a, b, c, d], e) は [a, e, c, e] になる)
a { (calc-in-set
) [`in(a,b)'] 関数は、
数 a が b で示される集合の要素なら真です。
b が区間型式の場合、a がその区間内の数であれば真です。
b がベクトルなら、a がそのベクトルの
要素のひとつに一致すれば真です。
(ベクトルの要素のどれかが区間であって、いずれかの区間に含まれれば真。)
b が普通の数値の場合は、a と b の値が等しいとき真です。
この種の集合操作コマンド群は、Set Operations using Vectors 参照 。
`typeof(a)' 関数は、a の型を示す整数か変数を生成します。 a が数値か、ベクトルか、変数であれば、結果は次のどれかになります。
1 Integer 整数 2 Fraction 分数 3 Floating-point number 浮動小数 4 HMS form 時分秒 5 Rectangular complex number 直交座標複素数 6 Polar complex number 極座標複素数 7 Error form 誤差 8 Interval form 区間 9 Modulo form 剰余 10 Date-only form 日付 11 Date/time form 日付/時刻 12 Infinity (inf, uinf, or nan) 無限大 100 Variable 変数 101 Vector (but not a matrix) (行列以外の)ベクトル 102 Matrix 行列
これ以外には、a は式であって、 結果は最上位関数呼出しの名前を示す変数になります。 (訳注: 意味不明。Otherwise, a is a formula, and the result is a variable which represents the name of the top-level function call.)
`integer(a)' 関数は、a が整数なら真を返します。
`real(a)' 関数は、a が実数(整数, 分数, 浮動小数のどれか)なら真です。
`constant(a)' 関数は、typeofテストの結果が変数以外を示す整数を生成し、
しかもベクトルや誤差型式のような場合はその成分自体も
(再帰的に) constant である場合に真を返します。
注意: 無限大とその仲間はこれらのテストを満たしません(真が帰りません)。
pi
や e
といった特殊定数もダメです。
同様に式を識別する類似の関数群については、宣言 参照 。 例えば、 `floor(x)' は確実に整数値を取りますが文字通りの整数定数ではないので、 `dint(floor(x))' は真となりますが、 `integer(floor(x))' はそうなりません。
`refers(a,b)' 関数は、変数(あるいはサブ数式)b が a の中に
登場すれば真、そうでなければ偽です。
ここに挙げる他のテストとは違い、
この関数は引数がたとえシンボリック(未評価)なまま与えられても明確な答を返します。
refers
が未評価のまま残される唯一のケースは、
a が(bではない)素の変数の場合だけです。
`negative(a)' 関数は、 a が実際に負の数である場合、-x の形式である場合、 負に見える項が絡んだ積や商である、等の理由で a が負に"見える"場合に真を返します。 これは書替え規則で最も便利です。 `negative(a)' はどんな引数aでも 1 か 0 に評価してしまうので、 あらかじめ m O でデフォルト簡単化機能を止めておかないと (あるいは書替え条件のような非評価状況でないと)、式がすぐ消えてしまいます。
`variable(a)' 関数は、a が変数ならば真で、それ以外なら偽です。
a が関数呼出しならば、このテストはシンボリックなまま残されます。
pi
や inf
のような組込変数は他のテスト同様に変数と見なされます。
`nonvar(a)' 関数は、a が非変数なら真です。 引数が変数であれば、簡単化されずに残されるので、 現実にゼロ値を返すことはありません。 しかしながら、Calc の条件テストコマンド群は 確かに真でないものは"偽"と見なすので、 これで充分な場合が多いのです。
関数群 lin
, linnt
, islin
, islinnt
は、
式が"線形"かどうか調べます。
つまり定数 a, b および変数またはサブ数式 x を使って
a + b x 形式に書けるか否かです。
関数 `islin(f,x)' は、式 f が x について線形か調べ、
そうであれば 1 を返します。
例えば、`islin(x,x)', `islin(-x,x)', `islin(3,x)',
`islin(x y / 3 - 2, x)' などは全て 1 を返します。
`lin(f,x)' 関数も似ていますが、
1 を返す替りにベクトル [a, b, x] を返します。
上の例では、答のベクトルはそれぞれ
[0, 1, x], [0, -1, x], [3, 0, x], [-2, y/3, x]
になります。
lin
も islin
も一般に、
式が例えば `lin(2 x^2, x)' や `lin(sin(x), x)' など、
非線形であった場合は未評価の式を残します。
第2引数は式でもよく、`islin(2 + 3 sin(x), sin(x))' は真を返します。
linnt
と islinnt
関数は類似のチェックを実施しますが、
係数 b がゼロでない"ちゃんとした"線形形式かどうかを調べます。
例えば、`lin(2,x)' は [2, 0, x] を返し、
`lin(y,x)' は [y, 0, x] を返しますが、
`linnt(2,x)' や `linnt(y,x)' は未評価で残されます(言換えれば、
これらの式は x について"取るに足らない"と見なされたのです)。
4つの線型性テスト関数群は全て、第2引数を省略できます。
その場合、入力はどの非定数式について線形でも構いません。
ここで、a=0, b=1 のケースは些細とみなされ、
a, b が定数になる場合?は認知されます。
従って、
`lin(2 x y)' は [0, 2, x y] を返し、
`lin(2 - x y)' は [2, -1, x y] を返し、
`lin(x y)' は [0, 1, x y] を返します。
linnt
関数は初めの2例を許しますが、3番目は些細として放置します。
また、第2引数が省略された場合には、
lin
と linnt
のどちらも単なる定数を放置します。
`islin(2,x)' は真ですが、`islin(2)' は偽となります。
`istrue(a)' 関数は、a が非ゼロ数であるか、
非ゼロ値が確かな式である場合に 1 を返し、それ以外の場合に 0 を返します。
istrue
の呼出しが使えるのは、
早まった evaluate がなされないように
m O モードが使われている場合に限ります。
(注意: 式が真かどうか判断するのに宣言が使われます。
istrue
は、dnonzero
が 1 を返す場合に 1 を返し、
dnonzero
が 0 を返すかシンボリックなまま残される場合には 0 を返します。
Go to the first, previous, next, last section, table of contents.
利用度数