2 * Introduction to Expressions::
6 * Functions and Variables for Expressions::
9 @c -----------------------------------------------------------------------------
10 @node Introduction to Expressions, Nouns and Verbs, Expressions, Expressions
11 @section Introduction to Expressions
12 @c -----------------------------------------------------------------------------
14 変数名として使えないたくさんの予約語があります。
15 これらを使うと、不可解な構文法エラーの原因となります。
18 integrate next from diff
22 unless product while thru
27 括弧で囲み、コンマで区切ることで、式の列が構成できます。
28 これは、@b{C}言語の@i{コンマ式}に似ています。
32 (%i2) (x: x+1, x: x^2);
34 (%i3) (if (x > 17) then 2 else 4);
36 (%i4) (if (x > 17) then x: 2 else y: 4, y+x);
40 ループが返す値はあまり役に立たない@code{done}ですが、Maximaではループでさえ式です。
43 (%i1) y: (x: 1, for i from 1 thru 10 do (x: x*i))$
48 ところが、本当に欲しいものは、たぶん、実際に値を戻す@i{コンマ式}の3番目の項を含むことで得られます。
51 (%i3) y: (x: 1, for i from 1 thru 10 do (x: x*i), x)$
56 @c -----------------------------------------------------------------------------
57 @node Nouns and Verbs, Identifiers, Introduction to Expressions, Expressions
58 @section Nouns and Verbs
59 @c -----------------------------------------------------------------------------
61 Maximaは「名詞(Noun)」演算子と「動詞(Verb)」演算子を区別します。
63 名詞は式の中で、実行されずシンボルとして現れる演算子です。
65 動詞は、関数名をクォートすることで、また、@mref{nounify}関数を適用することで、
67 名詞は、@mref{verbify}関数を適用することで動詞に変えることができます。
68 評価フラグ@mref{nouns}は、@mref{ev}を式の中の名詞を評価するようにします。
70 動詞形は、対応するLispシンボル上では、先頭のドル記号@code{$}で区別されます。
72 名詞形は、対応するLispシンボル上では、先頭のパーセント記号@code{%}で区別されます。
73 @code{'integrate}や(@code{diff}が返す)@code{'derivative}のように、
74 いくつかの名詞は特別な表示プロパティを持ちますが、ほとんどは特別な表示を持ちません。
75 デフォルトでは、表示される時、関数の名詞と動詞形は同一です。
76 グローバルフラグ@code{noundisp}は、
77 Maximaに、先頭のクォートマーク@code{'}で名詞形を表示させます。
79 @mref{noun}, @mref{nouns}, @mref{nounify}, や@mref{verbify}も参照してください。
88 @c declare (bar, noun);
92 @c integrate (1/x, x, 1, 42);
93 @c 'integrate (1/x, x, 1, 42);
104 (%i4) 'foo (42), nouns;
106 (%i5) declare (bar, noun);
108 (%i6) bar (x) := x/17;
114 (%i8) bar (52), nouns;
118 (%i9) integrate (1/x, x, 1, 42);
120 (%i10) 'integrate (1/x, x, 1, 42);
128 (%i11) ev (%, nouns);
133 @category{Evaluation}
134 @category{Nouns and verbs}
137 @c -----------------------------------------------------------------------------
138 @node Identifiers, Inequality, Nouns and Verbs, Expressions
140 @c -----------------------------------------------------------------------------
142 Maximaの識別子は、アルファベット文字と、0から9までの数詞と、
143 バックスラッシュ@code{\}文字に続く任意の特別文字で構成されます。
145 もしバックスラッシュが先行するなら、数詞は、識別子の最初の文字となることができます。
146 2番目や後の文字の数詞は、バックスラッシュが先行する必要はありません。
148 文字は、@code{declare}関数によってアルファベットと宣言することができます。
149 もし宣言されたら、識別子の中でバックスラッシュで先行する必要はありません。
150 アルファベット文字は、@code{A}から@code{Z}まで, @code{a}から @code{z}まで, @code{%},と@code{_}が初期設定です。
153 識別子@code{foo}, @code{FOO}, と@code{Foo}は別の物です。
154 この点に関して@ref{Lisp and Maxima}を参照してください。
156 Maximaの識別子は、ドル記号@code{$}で始まるLispのシンボルです。
157 Maximaの中で現れる時、他の任意のLispシンボルは、クエスチョンマーク@code{?}で始まります。
158 この点に関して@ref{Lisp and Maxima}を参照してください。
163 @c %an_ordinary_identifier42;
164 @c embedded\ spaces\ in\ an\ identifier;
166 @c [foo+bar, foo\+bar];
168 @c [symbolp (foo\+bar), symbolp (\1729)];
169 @c [is (foo\+bar = foo+bar), is (\1729 = 1729)];
171 @c declare ("~", alphabetic);
173 @c [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
174 @c :lisp (defvar *my-lisp-variable* '$foo)
175 @c ?\*my\-lisp\-variable\*;
178 (%i1) %an_ordinary_identifier42;
179 (%o1) %an_ordinary_identifier42
180 (%i2) embedded\ spaces\ in\ an\ identifier;
181 (%o2) embedded spaces in an identifier
184 (%i4) [foo+bar, foo\+bar];
185 (%o4) [foo + bar, foo+bar]
188 (%i6) [symbolp (foo\+bar), symbolp (\1729)];
190 (%i7) [is (foo\+bar = foo+bar), is (\1729 = 1729)];
194 (%i9) declare ("~", alphabetic);
198 (%i11) [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
199 (%o11) [false, false, false]
200 (%i12) :lisp (defvar *my-lisp-variable* '$foo)
202 (%i12) ?\*my\-lisp\-variable\*;
210 @c -----------------------------------------------------------------------------
211 @node Inequality, Functions and Variables for Expressions, Identifiers, Expressions
213 @c -----------------------------------------------------------------------------
215 Maximaは、不等式演算子@code{<}, @code{<=}, @code{>=}, @code{>}, @code{#}, @code{notequal}を持ちます。
216 条件式の記述に関しては、@code{if}を参照してください。
218 @c -----------------------------------------------------------------------------
219 @node Functions and Variables for Expressions, , Inequality, Expressions
220 @section Functions and Variables for Expressions
221 @c -----------------------------------------------------------------------------
223 @c NEEDS WORK, ESPECIALLY EXAMPLES
225 @c -----------------------------------------------------------------------------
227 @deffn {関数} alias (@var{new_name_1}, @var{old_name_1}, @dots{}, @var{new_name_n}, @var{old_name_n})
229 (利用者もしくはシステム)関数や変数、配列等に対して別名を与えます。
233 @category{Declarations and inferences}
237 @c -----------------------------------------------------------------------------
239 @defvr {システム変数} aliases
243 (@mref{alias}, @mref{ordergreat}, @mref{orderless}関数によって、もしくは、
245 アトムを@mref{noun}に宣言することで、設定される)
250 @category{Declarations and inferences}
251 @category{Global variables}
255 @c NEEDS TO BE REWORKED. NOT CONVINCED THIS SYMBOL NEEDS ITS OWN ITEM
256 @c (SHOULD BE DESCRIBED IN CONTEXT OF EACH FUNCTION WHICH RECOGNIZES IT)
258 @c -----------------------------------------------------------------------------
260 @defvr {キーワード} allbut
262 @code{part}コマンド(すなわち、@mref{part},@mref{inpart},@mref{substpart},
263 @mref{substinpart},@mref{dpart}, @mref{lpart})と共に動作します。例えば、
266 @c expr : e + d + c + b + a;
267 @c part (expr, [2, 5]);
270 (%i1) expr : e + d + c + b + a;
271 (%o1) e + d + c + b + a
272 (%i2) part (expr, [2, 5]);
279 @c expr : e + d + c + b + a;
280 @c part (expr, allbut (2, 5));
283 (%i1) expr : e + d + c + b + a;
284 (%o1) e + d + c + b + a
285 (%i2) part (expr, allbut (2, 5));
289 @mref{kill}も@code{allbut}を認識します。
292 @c [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
293 @c kill (allbut (cc, dd));
297 (%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
298 (%o1) [11, 22, 33, 44, 55]
299 (%i2) kill (allbut (cc, dd));
301 (%i1) [aa, bb, cc, dd];
302 (%o1) [aa, bb, 33, 44]
305 @code{kill(allbut(@var{a_1}, @var{a_2}, ...))}は、
306 シンボル@var{a_1}, @var{a_2}, @dots{}をキルしないよう除外して
307 @code{kill(all)}を実行します。
311 @c THE FUNCTION APRPOS IS MOVED TO THE FILE HELP.TEXI
313 @c -----------------------------------------------------------------------------
315 @deffn {関数} args (@var{expr})
317 @code{expr}の引数のリストを返します。
318 ここで、@code{expr}アトム以外のいかなる種類の式を取り得ます。
319 トップレベル演算子の引数だけが抽出されます;
320 @code{expr}の部分式は、要素として、または、引数のリストの要素の部分式として現れます。
322 リストの中の項目の順序は、グローバルフラグ@mref{inflag}に依存するかもしれません。
324 @code{args (@var{expr})}は、@code{substpart ("[", @var{expr}, 0)}と同値です。
325 @mref{substpart}と@mref{op}も参照してください。
329 @category{Expressions}
334 @c SPLIT OFF EXAMPLES INTO EXAMPLE SECTION
336 @c -----------------------------------------------------------------------------
338 @deffn {関数} atom (@var{expr})
340 もし @var{expr}がアトム(すなわち、数や名前や文字)なら、
341 @code{true}、そうでなければ @code{false}を返します。
342 例えば、 @code{atom(5)}は @code{true}ですが、
343 (@code{a[1]}と @code{x}はバインドされていないと仮定して) @code{atom(a[1])}や @code{atom(sin(x))}は @code{false}です。
346 @category{Expressions}
347 @category{Predicate functions}
351 @c -----------------------------------------------------------------------------
353 @deffn {関数} box (@var{expr})
354 @deffnx {関数} box (@var{expr}, @var{a})
356 枠で囲んだ@var{expr}を返します。
357 返り値は、演算子として@code{box}を持ち、引数として@var{expr}を持つ式です。
358 @code{display2d}が@code{true}の時、ディスプレイ上に枠が描かれます。
360 @code{box (@var{expr}, @var{a})}は、
361 シンボル@var{a}でラベルされた枠で@var{expr}を囲みます。
362 もし枠の幅より長ければ、ラベルは切りつめられます。
365 しかしながら、枠に入れられた式は中身に評価されないので、
366 枠に入れられた式は、計算から効果的に除外されます。
368 @mref{boxchar}は、@code{box}, @mref{dpart}, @mref{lpart}関数において
378 @c box (a^2 + b^2, term_1);
379 @c 1729 - box (1729);
381 @c box (sin(x) + cos(y));
384 (%i1) box (a^2 + b^2);
393 (%i4) box (a^2 + b^2);
396 (%o4) "(c - d) + 1522756"
398 (%i5) box (a^2 + b^2, term_1);
401 (%o5) "(c - d) + 1522756"
403 (%i6) 1729 - box (1729);
409 (%i8) box (sin(x) + cos(y));
411 (%o8) -cos(y) + sin(x)-
416 @category{Expressions}
420 @c -----------------------------------------------------------------------------
422 @defvr {オプション変数} boxchar
425 @code{boxchar}は、@mref{box}, @mref{dpart}, @mref{lpart}関数において
428 式の中の枠すべては、@code{boxchar}の現在値で描かれます;
432 @category{Expressions}
436 @c NEEDS CLARIFICATION !!!
438 @c -----------------------------------------------------------------------------
440 @deffn {関数} collapse (@var{expr})
442 共通の(すなわち等しい)部分式の全てを共用と(すなわち、同じセルを使用)させることで、
443 @var{expr}を縮約し、スペースを節約します。
444 (@code{collapse}は、@code{optimize}コマンドによって使われるサブルーチンです。)
445 例えば,@code{collapse}をコールすることは、
446 @mref{save}ファイルに積んだ後役に立つかもしれません。
447 @code{collapse ([@var{expr_1}, ..., @var{expr_n}])}を使うことで、いくつかの式を
449 同様に、@code{collapse (listarray ('A))}を実行することで、配列@code{A}の要素を縮約できます。
452 @category{Expressions}
458 @c -----------------------------------------------------------------------------
460 @deffn {関数} disolate (@var{expr}, @var{x_1}, @dots{}, @var{x_n})
462 ユーザーに1つ以上の変数を同時にisolate可能にさせることを除いて、
463 @code{isolate (@var{expr}, @var{x})}に似ています。
464 例えば、もし多重積分の中で変数を変えようとしていて、それが2つ以上の積分変数を含んだ変数変換なら、これは役立つかもしれません。
465 この関数は、@file{simplification/disol.mac}から自動ロードされます。
466 @code{demo("disol")$}でデモが入手可能です。
469 @category{Expressions}
473 @c -----------------------------------------------------------------------------
475 @deffn {関数} dispform (@var{expr})
476 @deffnx {関数} dispform (@var{expr}, all)
478 @var{expr}の外部表現を返します。
480 @code{dispform(@var{expr})}は、主(トップレベル)演算子に関して外部表現を返します。
481 @code{dispform(@var{expr}, all)}は、@var{expr}の中の演算子すべてに関して
484 @mref{part}, @mref{inpart}, @mref{inflag}も参照してください。
488 @code{- x}の内部表現は、「-1掛ける@code{x}」ですが、
489 外部表現は、「マイナス@code{x}」です。
493 @c ?format (true, "~S~%", %);
495 @c ?format (true, "~S~%", %);
500 (%i2) ?format (true, "~S~%", %);
501 ((MTIMES SIMP) -1 $X)
503 (%i3) dispform (- x);
505 (%i4) ?format (true, "~S~%", %);
510 @code{sqrt(x)}の内部表現は、「@code{x}の1/2乗」ですが、
511 外部表現は、「@code{x}の平方根」です。
515 @c ?format (true, "~S~%", %);
516 @c dispform (sqrt (x));
517 @c ?format (true, "~S~%", %);
522 (%i2) ?format (true, "~S~%", %);
523 ((MEXPT SIMP) $X ((RAT SIMP) 1 2))
525 (%i3) dispform (sqrt (x));
527 (%i4) ?format (true, "~S~%", %);
532 オプション引数@code{all}の使用。
535 @c expr : sin (sqrt (x));
536 @c freeof (sqrt, expr);
537 @c freeof (sqrt, dispform (expr));
538 @c freeof (sqrt, dispform (expr, all));
541 (%i1) expr : sin (sqrt (x));
543 (%i2) freeof (sqrt, expr);
545 (%i3) freeof (sqrt, dispform (expr));
547 (%i4) freeof (sqrt, dispform (expr, all));
552 @category{Expressions}
558 @c -----------------------------------------------------------------------------
560 @deffn {関数} dpart (@var{expr}, @var{n_1}, @dots{}, @var{n_k})
562 @mref{part}と同じ部分式を選択しますが、
564 枠の中に表示されて選択された部分式を持つ式全体を返します。
568 (%i1) dpart (x+y/z^2, 1, 2, 1);
578 @category{Expressions}
582 @c -----------------------------------------------------------------------------
584 @defvr {オプション変数} exptisolate
587 @c WHAT DOES THIS MEAN EXACTLY ??
588 @code{exptisolate}が@code{true}の時、
589 @code{isolate (expr, var)}は、
590 @code{var}を含む(@code{%e}のような)アトムの指数を検査します。
592 @c NEED EXAMPLES HERE
594 @category{Expressions}
598 @c -----------------------------------------------------------------------------
600 @defvr {オプション変数} exptsubst
603 @code{exptsubst}が@code{true}の時、
604 @code{%e^(a x)}の中の@code{%e^x}へ@code{y}を代入するような代入を許します。
606 @c NEED EXAMPLES HERE
608 @category{Exponential and logarithm functions}
609 @category{Expressions}
613 @c -----------------------------------------------------------------------------
615 @deffn {関数} freeof (@var{x_1}, @dots{}, @var{x_n}, @var{expr})
617 もし@var{x_1}と等しい@var{expr}の部分式がないか、
618 @var{x_1}が@var{expr}の中でダミー変数としてのみ現れるか、
619 @var{x_1}が@var{expr}の中で任意の演算子の名詞形でも動詞形でもないなら、
620 @code{freeof (@var{x_1}, @var{expr})}は、@code{true}を返します。
621 そうでなければ、@code{false}を返します。
623 @code{freeof (@var{x_1}, ..., @var{x_n}, @var{expr})}は、
624 @code{freeof (@var{x_1}, @var{expr})かつ、
625 ...かつfreeof (@var{x_n}, @var{expr})}と同値です。
627 引数@var{x_1}, @dots{}, @var{x_n} は、
628 関数や変数の名前、添字付き名前、(ダブルクォートでくくられた)演算子、もしくは一般式
630 @code{freeof}は引数を評価します。
632 @code{freeof}は、そのままは(整理と評価の後)@var{expr}上でのみ演算し、
633 ある同値の表現が違った結果を与えるかどうかを決定しようとはしません。
634 特に、整理は、同値ですが、@var{expr}の原型とは違った要素を含む異なる式を生成するかもしれません。
636 もし式の外部にバインドを持たなければ、変数は、式の中のダミー変数です。
637 @code{freeof}によって認識されたダミー変数は、
638 和や積のインデックス、@mref{limit}の中の極限変数、
639 @mref{integrate}の定積分形の中の積分変数、
640 @mref{laplace}の中のオリジナル変数、
642 @mref{lambda}式の中の引数です。
644 @code{integrate}の不定積分形は、積分変数から自由では@i{ありません}。
648 引数は、関数、変数、添字付き名前、演算子、式の名前です。
649 @code{freeof (a, b, expr)}は
650 @code{freeof (a, expr) and freeof (b, expr)}と同値です。
653 (%i1) expr: z^3 * cos (a[1]) * b^(c+d);
657 (%i2) freeof (z, expr);
659 (%i3) freeof (cos, expr);
661 (%i4) freeof (a[1], expr);
663 (%i5) freeof (cos (a[1]), expr);
665 (%i6) freeof (b^(c+d), expr);
667 (%i7) freeof ("^", expr);
669 (%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
673 @code{freeof}は引数を評価します。
678 (%i3) freeof (c, expr);
682 @code{freeof}は、同値の式を考慮しません。
689 (%o2) b + 5 a b + 10 a b + 10 a b + 5 a b + a
690 (%i3) freeof (a+b, %);
692 (%i4) freeof (a+b, expr);
697 (%i6) freeof (exp, exp (x));
702 不定積分は積分変数から自由ではありません。
705 (%i1) freeof (i, 'sum (f(i), i, 0, n));
707 (%i2) freeof (x, 'integrate (x^2, x, 0, 1));
709 (%i3) freeof (x, 'integrate (x^2, x));
714 @category{Expressions}
718 @c -----------------------------------------------------------------------------
720 @defvr {オプション変数} inflag
723 @code{inflag}が@code{true}の時、
724 部分抽出のための関数は、@code{expr}の内部形式を検査します。
726 整理器は式を再順序付けすることに注意してください。
728 もし@code{inflag}が@code{true}なら、
729 @code{first (x + y)}は、@code{x}を返し、
730 もしif @code{inflag}が@code{false}なら、@code{y}を返します。
731 (@code{first (y + x)}は同じ結果を与えます。)
733 また、@code{inflag}を@code{true}に設定し、@mref{part}や@mref{substpart}をコールすることは、
734 @mref{inpart}や@mref{substinpart}をコールすることと同じです。
736 @code{inflag}の設定に影響される関数は以下の通りです:
737 @mref{part}, @mref{substpart}, @mref{first}, @mref{rest}, @mref{last}, @mref{length}, @mref{for} ... @code{in}構成子,
738 @mref{map}, @mref{fullmap}, @mref{maplist}, @mref{reveal}, @mref{pickapart}。
740 @c NEED EXAMPLES HERE
742 @category{Expressions}
748 @c -----------------------------------------------------------------------------
750 @deffn {関数} inpart (@var{expr}, @var{n_1}, ..., @var{n_k})
752 @code{part}に似ていますが、表示形式ではなく内部表現上で機能し、
753 フォーマットが実行されないのでより速いかもしれません。
754 (内部形式での変数の順序はしばしば表示形式でのそれと異なるので)
756 (以下の演算子は式から取り除かれるので)単項マイナス、引き算、割り算を扱う際の部分式の順序
758 @code{part (x+y, 0)}や@code{inpart (x+y, 0)}は、
760 演算子を参照するため、"で囲まれたものになります。
761 例えば、@code{... if inpart (%o9,0) = "+" then ...}.
768 (%i2) inpart (%, 3, 2);
770 (%i3) part (%th (2), 1, 2);
772 (%i4) 'limit (f(x)^g(x+1), x, 0, minus);
776 (%i5) inpart (%, 1, 2);
781 @category{Expressions}
787 @c -----------------------------------------------------------------------------
789 @deffn {関数} isolate (@var{expr}, @var{x})
790 和であり、中間式ラベル(それらは@code{%t1}, @code{%t2}, ...のようなアトムなシンボルです)
791 で置き換えられた@var{x}を含まない部分式を含む@var{expr}を返します。
792 興味のある変数を含まない部分式の不必要な展開を避けるのに、これはしばしば役立ちます。
793 中間ラベルは部分式にバインドされているので、
794 それらが現れた式を評価することで、それらをすべて元に代入することができます。
796 もし@mref{exptisolate} (デフォルト値: @code{false})が@code{true}なら、
797 @code{isolate}は、@var{x}を含むか、(@code{%e}のような)アトムの指数を検査します。
799 もし@code{isolate_wrt_times}が@code{true}なら、
800 @code{isolate}は積に関してもisolateします。
801 @mref{isolate_wrt_times}を参照してください。
803 サンプルを見るには、@code{example (isolate)}を実行してください。
806 @category{Expressions}
812 @c -----------------------------------------------------------------------------
813 @anchor{isolate_wrt_times}
814 @defvr {オプション変数} isolate_wrt_times
817 @code{isolate_wrt_times}が@code{true}の時,
818 @code{isolate}は、積に関してもisolateします。
819 例えば、スイッチの両方の設定を比較すると、
822 (%i1) isolate_wrt_times: true$
823 (%i2) isolate (expand ((a+b+c)^2), c);
835 (%o4) c + %t3 c + %t2 c + %t4
836 (%i4) isolate_wrt_times: false$
837 (%i5) isolate (expand ((a+b+c)^2), c);
839 (%o5) c + 2 b c + 2 a c + %t4
843 @category{Expressions}
849 @c -----------------------------------------------------------------------------
850 @anchor{listconstvars}
851 @defvr {オプション変数} listconstvars
854 @code{listconstvars}が@code{true}の時、
855 @mref{listofvars}は、@code{%e}, @code{%pi}, @code{%i}や
857 もしそれらが、@code{listofvars}がコールされた式の中で現れたなら、
862 @category{Expressions}
866 @c -----------------------------------------------------------------------------
867 @anchor{listdummyvars}
868 @defvr {オプション変数} listdummyvars
871 @code{listdummyvars}が@code{false}の時、
872 式の中の「ダミー変数」は、@mref{listofvars}が返すリストの中に含まれません。
873 (「ダミー変数」の意味は@mref{freeof}で与えられているものです。
874 「ダミー変数」は、和や積のインデックスや、極限変数、定積分変数のように数学的なものです。)
879 (%i1) listdummyvars: true$
880 (%i2) listofvars ('sum(f(i), i, 0, n));
882 (%i3) listdummyvars: false$
883 (%i4) listofvars ('sum(f(i), i, 0, n));
888 @category{Expressions}
894 @c -----------------------------------------------------------------------------
896 @deffn {関数} listofvars (@var{expr})
898 @var{expr}の中の変数のリストを返します。
900 もし@mref{listconstvars}が@code{true}なら、
901 @code{listofvars}は、@code{%e}, @code{%pi}, @code{%i}や
903 もしそれらが、@var{expr}の中で現れたなら、
907 変数のリストのなかの「ダミー変数」を除外したり含めたりするには、オプション変数 @mref{listdummyvars}も参照してください。
910 (%i1) listofvars (f (x[1]+y) / g^(2+a));
916 @category{Expressions}
922 @c -----------------------------------------------------------------------------
924 @deffn {関数} lfreeof (@var{list}, @var{expr})
926 @var{list}のそれぞれのメンバー@var{m}に関して、
927 @code{freeof (@var{m}, @var{expr})}をコールします。
928 もし@code{freeof}のコールのいずれかが@code{false}を返すなら、
929 @code{false}を返し、そうでなければ、@code{true}を返します。
932 @category{Expressions}
938 @c -----------------------------------------------------------------------------
940 @deffn {関数} lpart (@var{label}, @var{expr}, @var{n_1}, @dots{}, @var{n_k})
942 @code{dpart}に似ていますが、ラベルされた枠を使います。
943 ラベルされた枠は、@code{dpart}によって生成されたものに似ていますが、
947 @category{Expressions}
951 @c NEEDS CLARIFICATION, EXAMPLES
953 @c -----------------------------------------------------------------------------
957 変数を@code{mainvar}に宣言することができます。
958 アトムに関する順序付けスケールは本質的に以下の通りです:
959 数 < 定数 (例えば、@code{%e}, @code{%pi}) < スカラー < 他の変数 < mainvars。
960 例えば、@code{(declare (x, mainvar), expand ((x+y)^4))}を伴う
961 @code{expand ((X+Y)^4)}。
962 (上の特長を使うことを選択したなら注意が必要なことに注意してください。
964 @code{mainvar}である@code{x}を含む式を、@code{mainvar}でない@code{x}を含む式から引くなら、
966 例えば@code{ev (expr, simp)}のような再整理が必要かもしれません。
967 また、@code{mainvar}である@code{x}を含む式を保存するなら、
971 @category{Declarations and inferences}
972 @category{Expressions}
976 @c NEEDS CLARIFICATION, EXAMPLES
978 @c -----------------------------------------------------------------------------
982 @code{noun}は、@mref{declare}コマンドのオプションの1つです。
984 「名詞」は、自動的には評価されないことを意味します。
987 @category{Nouns and verbs}
991 @c NEEDS CLARIFICATION, EXAMPLES
993 @c -----------------------------------------------------------------------------
995 @defvr {オプション変数} noundisp
998 @code{noundisp}が@code{true}の時、
1000 このスイッチは、関数定義を表示する時には、常に@code{true}です。
1003 @category{Display flags and variables}
1004 @category{Nouns and verbs}
1010 @c -----------------------------------------------------------------------------
1012 @deffn {関数} nounify (@var{f})
1014 関数名@var{f}の名詞形を返します。
1015 もし動詞関数の名前をまるで名詞のように参照したいなら、これが必要とされます。
1016 もしある引数に関して関数が評価されないなら、
1017 いくつかの動詞関数は名詞形を返すことに注意してください。
1018 これは、クォートに関数コールが続く時、返される形式でもあります。
1020 @mref{verbify}も参照してください。
1023 @category{Nouns and verbs}
1029 @c -----------------------------------------------------------------------------
1031 @deffn {関数} nterms (@var{expr})
1033 もし完全に展開されて、項の打ち消しや結合が起こらない場合の、@var{expr}が持つ
1035 @code{sin (@var{expr})}, @code{sqrt (@var{expr})}, @code{exp (@var{expr})},
1037 @var{expr}が(もしそれが和なら)
1038 どんなにたくさんの項を持とうと、1項と数えます。
1041 @category{Expressions}
1047 @c -----------------------------------------------------------------------------
1049 @deffn {関数} op (@var{expr})
1051 式@var{expr}のメインの演算子を返します。
1052 @code{op (@var{expr})}は@code{part (@var{expr}, 0)}と同値です。
1055 もしメインの演算子が組み込みもしくはユーザー定義の前置、二項もしくはn項中置、後置、マッチフィックスもしくは無項演算子なら、文字列を返します。
1057 もし@var{expr}が添字付き関数式なら、
1058 @code{op}は添字付き関数を返します;
1059 この場合、戻り値はアトムではありません。
1061 @var{expr}は配列関数もしくは通常の関数式であり、
1062 @code{op}はシンボルを返します。
1064 @code{op}はグローバルフラグ@mref{inflag}の値を見ています。
1068 @mref{args}も参照してください。
1073 @c stringdisp: true$
1076 @c op ('sin (a + b));
1080 @c op ('(if a > b then c else d));
1084 @c op (F [x, y] (a, b, c));
1085 @c op (G [u, v, w]);
1088 (%i1) stringdisp: true$
1089 (%i2) op (a * b * c);
1091 (%i3) op (a * b + c);
1093 (%i4) op ('sin (a + b));
1099 (%i7) op ([a, b, c]);
1101 (%i8) op ('(if a > b then c else d));
1103 (%i9) op ('foo (a));
1105 (%i10) prefix (foo);
1109 (%i12) op (F [x, y] (a, b, c));
1112 (%i13) op (G [u, v, w]);
1117 @category{Expressions}
1118 @category{Operators}
1124 @c -----------------------------------------------------------------------------
1126 @deffn {関数} operatorp (@var{expr}, @var{op})
1127 @deffnx {関数} operatorp (@var{expr}, [@var{op_1}, @dots{}, @var{op_n}])
1129 もし@var{op}が@var{expr}の演算子に等しければ、
1130 @code{operatorp (@var{expr}, @var{op})}は@code{true}を返します。
1132 もしある要素@var{op_1}, ..., @var{op_n}が@var{expr}に等しければ、
1133 @code{operatorp (@var{expr}, [@var{op_1}, @dots{}, @var{op_n}])}は@code{true}を返します。
1136 @category{Operators}
1137 @category{Predicate functions}
1141 @c NEEDS CLARIFICATION, EXAMPLES
1143 @c -----------------------------------------------------------------------------
1144 @anchor{option_opsubst}
1145 @defvr {オプション変数} opsubst
1148 @code{opsubst}が@code{false}の時、
1149 @mref{subst}は、式の中の演算子に代入を試みません。
1151 @code{(opsubst: false, subst (x^2, r, r+r[0]))}は機能します。
1154 @category{Expressions}
1160 @c -----------------------------------------------------------------------------
1162 @deffn {関数} optimize (@var{expr})
1164 @var{expr}と同じ値と副作用を生成する式を返しますが、
1165 共通の部分式の再計算を避けることによってより効率的に行います。
1166 @code{optimize}は、共通の部分式すべてが共用されるように引数を縮約する副作用も持ちます。
1167 例を見るには、@code{example (optimize)}を実行してください。
1170 @category{Expressions}
1175 @c -----------------------------------------------------------------------------
1176 @anchor{optimprefix}
1177 @defvr {オプション変数} optimprefix
1180 @code{optimprefix}は@mref{optimize}コマンドによって生成されたシンボルのために
1184 @category{Expressions}
1188 @c -----------------------------------------------------------------------------
1191 @deffn {関数} ordergreat (@var{v_1}, @dots{}, @var{v_n})
1192 @deffnx {関数} orderless (@var{v_1}, @dots{}, @var{v_n})
1195 @var{v_1}が@var{v_2}に続き、@var{v_2}は、@dots{}, @var{v_n}に続き、
1196 そして@var{v_n}は 引数として言及されなかった他の任意のシンボルに続くというように、
1197 Maximaの式の標準の順序付けを変えます。
1200 @var{v_1}が@var{v_2}に先行し、@var{v_2}は、@dots{}, @var{v_n}に先行し、
1201 そして@var{v_n}は 引数として言及されなかった他の任意のシンボルに先行するというように、
1202 Maximaの式の標準の順序付けを変えます。
1204 @code{ordergreat}や@code{orderless}によって確立される順序は、
1205 @mref{unorder}によって解消されます。
1206 @code{ordergreat}や@code{orderless}は、
1207 @code{unorder}がコールされるまで、
1208 それぞれ一度だけコールすることができます;
1209 @code{ordergreat}の@code{orderless}の最後のコールだけが効果を持ちます。
1211 @mref{ordergreatp}も参照してください。
1214 @category{Expressions}
1218 @c -----------------------------------------------------------------------------
1219 @anchor{ordergreatp}
1221 @deffn {関数} ordergreatp (@var{expr_1}, @var{expr_2})
1222 @deffnx {関数} orderlessp (@var{expr_1}, @var{expr_2})
1224 もしMaximaの式の標準の順序付けの中で、@var{expr_1}が@var{expr_2}に続くなら、
1225 @code{ordergreatp}は、@code{true}を返し、
1226 そうでなければ、@code{false}を返します。
1228 もしMaximaの式の標準の順序付けの中で、@var{expr_1}が@var{expr_2}に先行するなら、
1229 @code{orderlessp}は、@code{true}を返し、
1230 そうでなければ、@code{false}を返します。
1232 Maximaのアトムや式のすべては、@code{ordergreatp}と@code{orderlessp}の下で比較可能です。これらの述語論理が推移的でないような式の孤立した例はあるけれども; それはバグです。
1234 アトム(シンボル、数リテラル、文字列)の標準の順序付けは以下の通りです。
1241 (@mref{orderless}の最初の引数)は以下に先行
1243 (@code{orderless}の最後の引数)
1247 (@mref{ordergreat}の最後の引数)は以下に先行
1249 (@code{ordergreat}の最初の引数)は以下に先行
1252 アトムでない式に関して、標準の順序付けはアトムの順序付けから演繹されます。
1253 組み込みの@code{+} @code{*} @code{^}演算子に関しては、
1255 他の組み込み演算子と他の半数や演算子、式すべてに関しては、
1256 (最初の引数から始めて)それらの引数によって順序付けされ、
1257 それから演算子や関数の名前によって順序付けされます。
1259 添字付きのシンボルは演算子と、添字は引数と考えられます。
1261 式の標準の順序付けは、関数@mref{ordergreat}と@mref{orderless}と、
1262 @mref{mainvar}, @mref{constant}, @code{scalar}宣言によって変更されます。
1264 @mref{sort}も参照してください。
1269 @code{%pi}は数値に従って順序付けされないことに注意してください。
1272 @c stringdisp : true;
1273 @c sort ([%pi, 3b0, 3.0, x, X, "foo", 3, a, 4, "bar", 4.0, 4b0]);
1276 (%i1) stringdisp : true;
1278 (%i2) sort([%pi, 3b0, 3.0, x, X, "foo", 3, a, 4, "bar", 4.0, 4b0]);
1279 (%o2) [3, 3.0, 4, 4.0, 3.0b0, 4.0b0, %pi, "bar", "foo", a, x, X]
1282 @code{ordergreat}、@code{orderless}関数の効果。
1285 @c sort ([M, H, K, T, E, W, G, A, P, J, S]);
1286 @c ordergreat (S, J);
1287 @c orderless (M, H);
1288 @c sort ([M, H, K, T, E, W, G, A, P, J, S]);
1291 (%i1) sort ([M, H, K, T, E, W, G, A, P, J, S]);
1292 (%o1) [A, E, G, H, J, K, M, P, S, T, W]
1293 (%i2) ordergreat (S, J);
1295 (%i3) orderless (M, H);
1297 (%i4) sort ([M, H, K, T, E, W, G, A, P, J, S]);
1298 (%o4) [M, H, A, E, G, K, P, T, W, J, S]
1301 @code{mainvar}, @code{constant}, @code{scalar}宣言の効果
1304 @c sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
1305 @c declare (aa, mainvar);
1306 @c declare ([baz, quux], constant);
1307 @c declare ([A1, B1], scalar);
1308 @c sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
1311 (%i1) sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
1312 (%o1) [aa, bar, baz, bb, cc, dd, foo, quux, A1, B1, C1]
1313 (%i2) declare (aa, mainvar);
1315 (%i3) declare ([baz, quux], constant);
1317 (%i4) declare ([A1, B1], scalar);
1319 (%i5) sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
1320 (%o5) [baz, quux, A1, B1, bar, bb, cc, dd, foo, C1, aa]
1326 @c sort ([1, 2, n, f(1), f(2), f(2, 1), g(1), g(1, 2), g(n),
1328 @c sort ([foo(1), X[1], X[k], foo(k), 1, k]);
1331 (%i1) sort ([1, 2, n, f(1), f(2), f(2, 1), g(1), g(1, 2), g(n),
1333 (%o1) [1, 2, f(1), g(1), g(1, 2), f(2), f(2, 1), n, g(n),
1335 (%i2) sort ([foo(1), X[1], X[k], foo(k), 1, k]);
1336 (%o2) [1, foo(1), X , k, foo(k), X ]
1341 @category{Expressions}
1342 @category{Predicate functions}
1348 @c -----------------------------------------------------------------------------
1350 @deffn {関数} part (@var{expr}, @var{n_1}, @dots{}, @var{n_k})
1352 @code{expr}の表示形式のパーツを返します。
1353 @code{expr}の最初のパーツ@var{n_1}、それから、パーツ@var{n_2}などなど、
1354 結果は、@code{expr}のパーツ@var{n_1}のパーツ@var{n_2}の, ...パーツ@var{n_k}です。
1355 もし添字が指定されないなら、@code{expr}を返します。
1357 @code{part}はリストの要素や行列の行を得るのに使うことができます。
1359 @c "If the last argument to a part function" => FOLLOWING APPLIES TO OTHER FUNCTIONS ??
1360 @c ATTEMPT TO VERIFY; IF SO, COPY THIS COMMENTARY TO DESCRIPTIONS OF OTHER FUNCTIONS
1361 もし@code{part}関数の最後の引数がインデックスのリストなら、
1362 それぞれがリストのインデックスに対応するいくつかの部分式が抽出されます。
1363 従って、@code{part (x + y + z, [1, 3])}は@code{z+x}です。
1365 @mref{piece}は、@code{part}関数を使ったとき、選択された最後の式を保持します。
1366 それは関数の実行中にセットされ、以下で示すように、関数自身の中で参照されることもあります。
1368 もし@mref{partswitch}が@code{true}に設定されているなら、
1369 式の選択されたパーツが存在しないとき、@code{end}が返されます。
1370 そうでなければ、エラーメッセージが出力されます。
1372 @mref{inpart}, @mref{substpart}, @mref{substinpart}, @mref{dpart}, @mref{lpart}も参照してください。
1378 @c part(z+2*y+a,[1,3]);
1379 @c part(z+2*y+a,2,1);
1382 (%i1) part(z+2*y+a,2);
1384 (%i2) part(z+2*y+a,[1,3]);
1386 (%i3) part(z+2*y+a,2,1);
1390 @code{example (part)}でさらに例を見ることができます。
1393 @category{Expressions}
1399 @c -----------------------------------------------------------------------------
1401 @deffn {関数} partition (@var{expr}, @var{x})
1405 (1)(積なら)@var{expr}の因子、(和なら)@var{expr}項、
1406 もしくは、(リストなら)@var{x}を含まないリストと、
1407 (2)@var{x}を含む因子、項、リスト、
1413 (%i1) partition (2*a*x*f(x), x);
1415 (%i2) partition (a+b, x);
1417 (%i3) partition ([a, b, f(a), c], a);
1418 (%o3) [[b, c], [a, f(a)]]
1422 @category{Expressions}
1428 @c -----------------------------------------------------------------------------
1430 @defvr {オプション変数} partswitch
1431 デフォルト値: @code{false}
1433 @code{partswitch}が@code{true}の時、
1434 式の選択された部分が存在しない時、@code{end}が返されます。
1435 そうでない時は、エラーメッセージが出力されます。
1438 @category{Expressions}
1442 @c -----------------------------------------------------------------------------
1444 @deffn {関数} pickapart (@var{expr}, @var{n})
1446 中間式ラベルを、深さが整数@var{n}での@var{expr}の部分式に割り当てます。
1447 より大きなもしくは小さな深さでの部分式はラベルに割り当てられません。
1448 @code{pickapart}は、元の式@var{expr}と同値の中間式の項による式を返します。
1450 @mref{part}, @mref{dpart}, @mref{lpart}, @mref{inpart},
1451 @mref{reveal}も参照してください。
1456 (%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
1459 (%o1) - log(sqrt(x + 1) + 1) + ------- + -----
1461 (%i2) pickapart (expr, 0);
1465 (%t2) - log(sqrt(x + 1) + 1) + ------- + -----
1469 (%i3) pickapart (expr, 1);
1471 (%t3) - log(sqrt(x + 1) + 1)
1484 (%o5) %t5 + %t4 + %t3
1485 (%i5) pickapart (expr, 2);
1487 (%t6) log(sqrt(x + 1) + 1)
1497 (%o8) --- + --- - %t6
1499 (%i8) pickapart (expr, 3);
1501 (%t9) sqrt(x + 1) + 1
1508 (%o10) ----- - log(%t9) + ---------
1510 (%i10) pickapart (expr, 4);
1516 (%o11) ------- + ----- - log(%t11 + 1)
1519 (%i11) pickapart (expr, 5);
1525 (%o12) ------- + ----- - log(sqrt(%t12) + 1)
1527 (%i12) pickapart (expr, 6);
1530 (%o12) ------- + ----- - log(sqrt(x + 1) + 1)
1535 @category{Expressions}
1541 @c -----------------------------------------------------------------------------
1543 @defvr {システム変数} piece
1545 @code{part}関数を使った時選択された最後の式を返します。
1546 @c WHAT DOES THIS MEAN EXACTLY ??
1547 関数の実行中に設定され、関数そのものの中で参照されることもあります。
1549 @c NEED "SEE ALSO" TO POINT TO LIST OF ALL RELEVANT FUNCTIONS
1552 @category{Expressions}
1556 @c -----------------------------------------------------------------------------
1558 @deffn {関数} psubst (@var{list}, @var{expr})
1559 @deffnx {関数} psubst (@var{a}, @var{b}, @var{expr})
1561 @code{psubst(@var{a}, @var{b}, @var{expr})}は@code{subst}に似ています。
1562 @code{subst}を参照してください。
1566 もし最初の引数@var{list}が等式のリストなら、
1567 関数@code{psubst}は平行代入します。
1569 並列代入するには、@mref{sublis}も参照してください。
1574 @code{psubst}を使った平行代入を示します。
1576 関数@code{subst}での結果を示します。それは逐次代入します。
1579 @c psubst ([a^2=b, b=a], sin(a^2) + sin(b));
1580 @c subst ([a^2=b, b=a], sin(a^2) + sin(b));
1583 (%i4) psubst ([a^2=b, b=a], sin(a^2) + sin(b));
1584 (%o4) sin(b) + sin(a)
1585 (%i5) subst ([a^2=b, b=a], sin(a^2) + sin(b));
1590 @category{Expressions}
1594 @c -----------------------------------------------------------------------------
1596 @deffn {関数} rembox (@var{expr}, unlabelled)
1597 @deffnx {関数} rembox (@var{expr}, @var{label})
1598 @deffnx {関数} rembox (@var{expr})
1599 @var{expr}から枠を取り除きます。
1601 @code{rembox (@var{expr}, unlabelled)}は、
1602 @var{expr}からラベルされていない枠すべてを取り除きます。
1604 @code{rembox (@var{expr}, @var{label})}は、
1605 @var{label}を負う枠のみを取り除きます。
1607 @code{rembox (@var{expr})}は、ラベルされているか否か問わず、
1610 枠は、@mref{box}, @mref{dpart}, @mref{lpart}関数によって描画されます。
1615 @c expr: (a*d - b*c)/h^2 + sin(%pi*x);
1616 @c dpart (dpart (expr, 1, 1), 2, 2);
1617 @c expr2: lpart (BAR, lpart (FOO, %, 1), 2);
1618 @c rembox (expr2, unlabelled);
1619 @c rembox (expr2, FOO);
1620 @c rembox (expr2, BAR);
1624 (%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
1627 (%o1) sin(%pi x) + ---------
1631 (%i2) dpart (dpart (expr, 1, 1), 2, 2);
1633 (%o2) sin("%pi x") + ---------
1638 (%i3) expr2: lpart (BAR, lpart (FOO, %, 1), 2);
1639 FOO""""""""""" BAR""""""""
1640 " """"""" " "a d - b c"
1641 (%o3) "sin("%pi x")" + "---------"
1642 " """"""" " " """" "
1643 """""""""""""" " " 2" "
1647 (%i4) rembox (expr2, unlabelled);
1649 FOO""""""""" "a d - b c"
1650 (%o4) "sin(%pi x)" + "---------"
1654 (%i5) rembox (expr2, FOO);
1657 (%o5) sin("%pi x") + "---------"
1663 (%i6) rembox (expr2, BAR);
1665 " """"""" " a d - b c
1666 (%o6) "sin("%pi x")" + ---------
1671 (%i7) rembox (expr2);
1673 (%o7) sin(%pi x) + ---------
1679 @category{Expressions}
1683 @c -----------------------------------------------------------------------------
1685 @deffn {関数} reveal (@var{expr}, @var{depth})
1687 指定された整数@var{depth}の@var{expr}の部分を
1693 和と差分は、@code{Sum(@var{n})}で置き換えられます。
1694 ここで、@var{n}は、和のオペランドの数です。
1696 積は@code{Product(@var{n})}で置き換えられます。
1697 ここで、@var{n}は、積のオペランドの数です。
1699 指数は、@code{Expt}で置き換えられます。
1701 商は、@code{Quotient}で置き換えられます。
1703 単項マイナスは、@code{Negterm}で置き換えられます。
1705 リストは@code{List(@var{n})}で置き換えられます
1706 ここで、@var{n}はリストの要素の数です。
1709 @var{depth}が@var{expr}の最大深さ以上の時、
1710 @code{reveal (@var{expr}, @var{depth})}は、@var{expr}をそのまま返します。
1712 @code{reveal}は、引数を評価します。
1713 @code{reveal}は、要約された式を返します。
1720 @c e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
1728 (%i1) e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
1731 (%o1) -------------------------
1734 (%i2) reveal (e, 1);
1736 (%i3) reveal (e, 2);
1740 (%i4) reveal (e, 3);
1742 Expt + Negterm + Expt
1743 (%o4) ------------------------
1744 Product(2) + Expt + Expt
1746 (%i5) reveal (e, 4);
1749 (%o5) ------------------------------------
1750 Product(2) Product(2)
1752 (%i6) reveal (e, 5);
1755 (%o6) --------------------------
1758 (%i7) reveal (e, 6);
1761 (%o7) -------------------------
1767 @category{Expressions}
1768 @category{Display functions}
1772 @c NEEDS EXPANSION, CLARIFICATION, MORE EXAMPLES
1774 @c -----------------------------------------------------------------------------
1776 @deffn {関数} sublis (@var{list}, @var{expr})
1779 @var{list}は等式のリストです。
1780 等式の左辺はアトムでなければいけません。
1782 変数@code{sublis_apply_lambda}は@code{sublis}の後の式整理を制御します。
1784 平行代入を行うには、@code{psubst}も参照してください。
1789 @c sublis ([a=b, b=a], sin(a) + cos(b));
1792 (%i1) sublis ([a=b, b=a], sin(a) + cos(b));
1793 (%o1) sin(b) + cos(a)
1797 @category{Expressions}
1801 @c -----------------------------------------------------------------------------
1802 @anchor{sublis_apply_lambda}
1803 @defvr {オプション変数} sublis_apply_lambda
1806 @code{lambda}の代入が@code{sublis}が使われた後の式整理の中で適用されるか
1807 、もしくは、ユーザーが、ものに適用されるように@mref{ev}を実行しなければいけないかを決めます。
1808 @code{true}は適用を意味します。
1811 @category{Expressions}
1815 @c -----------------------------------------------------------------------------
1817 @defvr {オプション変数} subnumsimp
1818 デフォルト値: @code{false}
1820 もし@code{true}なら、シンボル@code{f}が与えられた時だけ、
1821 関数@code{subst}と@code{psubst}は添字付き変数@code{f[x]}に数を代入できます。
1823 @code{subst}も参照してください。
1826 (%i1) subst(100,g,g[x]+2);
1828 subst: cannot substitute 100 for operator g in expression g
1830 -- an error. To debug this try: debugmode(true);
1832 (%i2) subst(100,g,g[x]+2),subnumsimp:true;
1837 @category{Expressions}
1841 @c NEEDS CLARIFICATION, MORE EXAMPLES
1843 @c -----------------------------------------------------------------------------
1845 @deffn {関数} subst (@var{a}, @var{b}, @var{c})
1847 @var{c}の中の@var{b}に@var{a}を代入します。
1848 @var{b}はアトムもしくは@var{c}の完全な部分式でなければなりません。
1849 例えば、@code{x+y+z}は@code{2*(x+y+z)}の完全な部分式である一方、@code{x+y}は完全な部分式ではありません。
1850 @var{b}がこれらの性質を持たない時は、@mref{substpart}もしくは@mref{ratsubst}が使える時があります(下記参照)。
1851 代わりに、もし@var{b}が@code{e/f}形式なら、@code{subst (a*f, e, c)}が使えますし、
1852 もし@var{b}が@code{e^(1/f)}形式なら、@code{subst (a^f, e, c)}が使えます。
1853 @code{subst}コマンドは@code{x^-y}の中の@code{x^y}も認識するので、
1854 @code{subst (a, sqrt(x), 1/sqrt(x))}は@code{1/a}を出力します。
1855 @var{a}と@var{b}はダブルクォート@code{"}で囲まれた式の演算子でも、関数名でも問題ありません。
1856 導関数形式の独立変数に代入したいなら、@code{at}関数(下記参照)を使うべきです。
1858 @c UMM, REVERSE THIS AND MOVE IT TO substitute ??
1859 @code{subst}は@code{substitute}のエーリアスです。
1861 コマンド@code{subst (@var{eq_1}, @var{expr})}もしくは@code{subst ([@var{eq_1}, ..., @var{eq_k}], @var{expr})}も許されている形式です。
1862 @var{eq_i}はされるべき代入を指示する等式です。
1863 それぞれの等式において、右辺が、式@var{expr}の中の左辺に代入されます。
1864 等式は、@var{expr}に、左から右へ逐次に代入されます。
1865 平行代入するには、関数@code{sublis}と@code{psubst}を参照してください。
1867 @mref{exptsubst}が@code{true}なら、
1868 @code{%e^(a*x)}の中の@code{%e^x}が@code{y}に置き換えられるような代入が許されます。
1870 @c WHAT IS THIS ABOUT ??
1871 @code{opsubst}が@code{false}の時、
1872 @code{subst}は式の演算子への代入を行いません。
1873 例えば、@code{(opsubst: false, subst (X^2, r, r+r[9]))}は意図通り動作します。
1878 @c subst (a, x+y, x + (x+y)^2 + y);
1879 @c subst (-%i, %i, a + b*%i);
1882 (%i1) subst (a, x+y, x + (x+y)^2 + y);
1885 (%i2) subst (-%i, %i, a + b*%i);
1889 代入は、等式のリストに関して逐次になされます。
1893 @c subst([a=b, b=c], a+b);
1894 @c sublis([a=b, b=c], a+b);
1897 (%i3) subst([a=b, b=c], a+b);
1899 (%i4) sublis([a=b, b=c], a+b);
1904 もっと例を見るには、@code{example (subst)}を実行してください。
1907 @category{Expressions}
1911 @c NEEDS CLARIFICATION
1912 @anchor{substinpart}
1913 @deffn {関数} substinpart (@var{x}, @var{expr}, @var{n_1}, ..., @var{n_k})
1915 @mref{substpart}と同様ですが、@code{substinpart}は@var{expr}の内部表現上で
1921 @c x . 'diff (f(x), x, 2);
1922 @c substinpart (d^2, %, 2);
1923 @c substinpart (f1, f[1](x + 1), 0);
1926 (%i1) x . 'diff (f(x), x, 2);
1929 (%o1) x . (--- (f(x)))
1932 (%i2) substinpart (d^2, %, 2);
1935 (%i3) substinpart (f1, f[1](x + 1), 0);
1939 もし@code{part}関数の最後の引数がインデックスのリストなら、
1940 複数の部分式が選ばれます。それぞれはリストのインデックスに対応します。
1944 @c part (x + y + z, [1, 3]);
1947 (%i1) part (x + y + z, [1, 3]);
1951 @code{part}関数を使った時、@mref{piece}は、最後の式の値を保持します。
1952 関数の実行の間に設定され、以下で示すように関数自身の中で参照されることもあります。
1953 もし@mref{partswitch}が@code{true}に設定されたら、
1954 式の選択された部分が存在しない時には@code{end}が返されます。
1955 そうでなければ、エラーメッセージが出力されます。
1958 @c expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
1959 @c part (expr, 2, [1, 3]);
1961 @c substpart (factor (piece), expr, [1, 2, 3, 5]);
1962 @c expr: 1/x + y/x - 1/z;
1963 @c substpart (xthru (piece), expr, [2, 3]);
1966 (%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
1968 (%o1) 27 y + 54 x y + 36 x y + y + 8 x + x + 1
1969 (%i2) part (expr, 2, [1, 3]);
1972 (%i3) sqrt (piece/54);
1974 (%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
1976 (%o4) (3 y + 2 x) + y + x + 1
1977 (%i5) expr: 1/x + y/x - 1/z;
1981 (%i6) substpart (xthru (piece), expr, [2, 3]);
1988 オプション @mref{inflag}を @code{true}に設定し
1989 @mref{part}か @mref{substpart}をコールすることは
1990 @code{inpart}か @code{substinpart}をコールすることと同じです。
1993 @category{Expressions}
1997 @c NEEDS CLARIFICATION
1999 @c -----------------------------------------------------------------------------
2001 @deffn {関数} substpart (@var{x}, @var{expr}, @var{n_1}, @dots{}, @var{n_k})
2003 @var{x}を、残りの引数を@code{part}に食わせた結果の部分式に代入します。
2004 @var{expr}の新しい値を返します。
2005 @var{x}は@var{expr}の演算子に代入される演算子でも問題ありません。
2006 いくつかの場合、@var{x}はダブルクォート@code{"}で囲まれる必要があります。
2007 (例えば、@code{substpart ("+", a*b, 0)}は@code{b + a}を返します。)
2013 @c substpart (3/2, %, 2, 1, 2);
2015 @c substpart ("+", %, 1, 0);
2023 (%i2) substpart (3/2, %, 2, 1, 2);
2028 (%i3) a*x + f(b, y);
2030 (%i4) substpart ("+", %, 1, 0);
2031 (%o4) x + f(b, y) + a
2034 また、オプション@mref{inflag}を@code{true}に設定し、
2035 @mref{part}や@code{substpart}をコールすることは、
2036 @code{inpart}や@mref{substinpart}をコールすることと同じになります。
2039 @category{Expressions}
2043 @c -----------------------------------------------------------------------------
2045 @deffn {関数} symbolp (@var{expr})
2047 もし@var{expr}がシンボルなら@code{true}、そうでないなら@code{false}を返します。
2048 事実上、@code{symbolp(x)}は、述語論理@code{atom(x) and not numberp(x)}と同値です。
2050 @c FOLLOWING REALLY WANTS TO BE @xref{Identiifers} BUT THAT
2051 @c LEAVES THE UNPLEASANT RESIDUE *Note ...:: IN THE OUTPUT OF describe
2052 @ref{Identifiers}も参照してください。
2055 @category{Predicate functions}
2059 @c -----------------------------------------------------------------------------
2061 @deffn {関数} unorder ()
2063 順序付けコマンド@code{ordergreat}と@code{orderless}の最後の使用で生成されたエーリアシングを使用不可にします。
2064 @code{ordergreat}と@code{orderless}は、
2065 @code{unorder}を呼び出さずに、一回以上使えないかもしれません。
2067 @code{ordergreat}と@code{orderless}で導入されたエーリアスに
2069 それ故に、@code{unorder}の実行後、以前の式にエーリアスが現れます。
2071 @code{ordergreat}と@code{orderless}も参照してください。
2075 @code{ordergreat(a)}はシンボル@code{a}のエーリアスを導入します。
2077 @code{%o2}と@code{%o4}の違いは消えません。
2078 @code{unorder}はシンボル@code{a}を再代入しないし、
2079 出力@code{%o7}にエーリアスが現れます。
2096 (%i3) ordergreat(a);
2101 (%i5) %th(1)-%th(3);
2112 @category{Expressions}
2116 @c -----------------------------------------------------------------------------
2118 @deffn {関数} verbify (@var{f})
2120 関数名@var{f}の動詞形を返します。
2121 @code{verb}, @code{noun}, @code{nounify}も参照してください。
2132 (%i1) verbify ('foo);
2136 (%i2) nounify (foo);
2143 @category{Nouns and verbs}