solve: do not call MEVAL.
[maxima.git] / doc / info / ja / Evaluation.texi
blob0dfc1aeafc16cc0c8d2b3041ec925241b6e1d2dc
1 @menu
2 * Functions and Variables for Evaluation::
3 @end menu
5 @c -----------------------------------------------------------------------------
6 @node Functions and Variables for Evaluation,  , Evaluation, Evaluation
7 @section Functions and Variables for Evaluation
8 @c -----------------------------------------------------------------------------
10 @c NEEDS EXAMPLES
11 @c THIS ITEM IS VERY IMPORTANT !!
13 @c -----------------------------------------------------------------------------
14 @anchor{quote}
15 @deffn {演算子} '
16 @ifinfo
17 @fnindex クォート演算子
18 @end ifinfo
20 シングルクォート演算子@code{'}は評価を抑制します。
22 シンボルにシングルクォートを用いると、シンボルが評価されません。
24 関数コールにシングルクォートを用いると、
25 関数の引数は(抑制されない限り)評価されますが、関数コールは評価されません。結果は、関数コールの名詞形です。
27 括弧でくくられた式にシングルクォートを用いると、
28 式の中のすべてのシンボルと関数コールは評価されません。
29 @c DUNNO IF THESE EXAMPLES ARE STILL NEEDED -- COVERED BY ITEMS UNDER "Examples"
30 例えば、@code{'(f(x))}は、式@code{f(x)}を評価しないことを意味します。
31 @code{'f(x)}(@code{f(x)}ではなく@code{f}へ適用されたシングルクォート)は@code{[x]}に適用された@code{f}の名詞形を返します。
33 シングルクォートは式整理を抑制しません。
35 グローバルフラグ @mref{noundisp}が @code{true}の時、名詞はシングルクォート付きで表示されます。
36 このスイッチは関数定義を表示するときには、常に@code{true}です。
38 クォートクォート演算子 @mxref{quote-quote, ''}と @mref{nouns}も参照ください。
40 例:
42 シンボルにシングルクォートを用いると、シンボルが評価されません。
44 @c ===beg===
45 @c aa: 1024;
46 @c aa^2;
47 @c 'aa^2;
48 @c ''%;
49 @c ===end===
50 @example
51 (%i1) aa: 1024;
52 (%o1)                         1024
53 (%i2) aa^2;
54 (%o2)                        1048576
55 (%i3) 'aa^2;
56                                  2
57 (%o3)                          aa
58 (%i4) ''%;
59 (%o4)                        1048576
60 @end example
62 関数コールにシングルクォートを用いると、関数の引数は評価されますが、関数コールが評価されません。
63 結果は、関数コールの名詞形です。
65 @c ===beg===
66 @c x0: 5;
67 @c x1: 7;
68 @c integrate (x^2, x, x0, x1);
69 @c 'integrate (x^2, x, x0, x1);
70 @c %, nouns;
71 @c ===end===
72 @example
73 (%i1) x0: 5;
74 (%o1)                           5
75 (%i2) x1: 7;
76 (%o2)                           7
77 (%i3) integrate (x^2, x, x0, x1);
78                                218
79 (%o3)                          ---
80                                 3
81 (%i4) 'integrate (x^2, x, x0, x1);
82                              7
83                             /
84                             [   2
85 (%o4)                       I  x  dx
86                             ]
87                             /
88                              5
89 (%i5) %, nouns;
90                                218
91 (%o5)                          ---
92                                 3
93 @end example
95 括弧でくくられた式にシングルクォートを用いると、式の中のすべてのシンボルと関数コールは評価されません。
97 @c ===beg===
98 @c aa: 1024;
99 @c bb: 19;
100 @c sqrt(aa) + bb;
101 @c '(sqrt(aa) + bb);
102 @c ''%;
103 @c ===end===
104 @example
105 (%i1) aa: 1024;
106 (%o1)                         1024
107 (%i2) bb: 19;
108 (%o2)                          19
109 (%i3) sqrt(aa) + bb;
110 (%o3)                          51
111 (%i4) '(sqrt(aa) + bb);
112 (%o4)                     bb + sqrt(aa)
113 (%i5) ''%;
114 (%o5)                          51
115 @end example
117 シングルクォートは式整理を抑制しません。
119 @c ===beg===
120 @c sin (17 * %pi) + cos (17 * %pi);
121 @c '(sin (17 * %pi) + cos (17 * %pi));
122 @c ===end===
123 @example
124 (%i1) sin (17 * %pi) + cos (17 * %pi);
125 (%o1)                          - 1
126 (%i2) '(sin (17 * %pi) + cos (17 * %pi));
127 (%o2)                          - 1
128 @end example
130 Maximaは組み込み数学関数による浮動小数点演算を整理とみなします。
132 @c ===beg===
133 @c sin(1.0);
134 @c '(sin(1.0));
135 @c ===end===
136 @example
137 (%i1) sin(1.0);
138 (%o1)                          .8414709848078965
139 (%i2) '(sin(1.0));
140 (%o2)                          .8414709848078965
141 @end example
143 @opencatbox
144 @category{Evaluation}
145 @category{Operators}
146 @closecatbox
147 @end deffn
149 @c -----------------------------------------------------------------------------
150 @anchor{quote-quote}
151 @deffn {演算子} ''
152 @ifinfo
153 @fnindex クォートクォート演算子
154 @end ifinfo
155 クォートクォート演算子@code{'@w{}'}(シングルクォートマーク2つ)は、入力式の中の評価を部分修正します。
157 一般式@var{expr}にクォートクォートを用いると、入力式の中の@var{expr}に@var{expr}の値を代入します。
159 式の演算子にクォートクォートを用いると、(もし動詞でないなら)演算子は名詞から動詞に変わります。
161 クォートクォート演算子は入力パーサが適用します;
162 クォートクォート演算子はパースされた入力式の一部としては格納されません。
163 クォートクォート演算子は、パースされるといつもすぐに適用され、クォートできません。
164 このように、関数定義やラムダ式、シングルクォート@code{'}でクォートされた式の中のように通常評価が抑制される時も、
165 クォートクォートがあると評価を実行します。
167 @mref{batch}や@mref{load}はクォートクォートを認識します。
169 シングルクォート演算子 @mxref{quote, '}と @mref{nouns}も参照ください。
171 例:
173 一般式@var{expr}にクォートクォートを用いると、入力式の中の@var{expr}に@var{expr}の値を代入します。
175 @c ===beg===
176 @c expand ((a + b)^3);
177 @c [_, ''_];
178 @c [%i1, ''%i1];
179 @c [aa : cc, bb : dd, cc : 17, dd : 29];
180 @c foo_1 (x) := aa - bb * x;
181 @c foo_1 (10);
182 @c ''%;
183 @c ''(foo_1 (10));
184 @c foo_2 (x) := ''aa - ''bb * x;
185 @c foo_2 (10);
186 @c [x0 : x1, x1 : x2, x2 : x3];
187 @c x0;
188 @c ''x0;
189 @c '' ''x0;
190 @c ===end===
191 @example
192 (%i1) expand ((a + b)^3);
193                      3        2      2      3
194 (%o1)               b  + 3 a b  + 3 a  b + a
195 (%i2) [_, ''_];
196                          3    3        2      2      3
197 (%o2)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
198 (%i3) [%i1, ''%i1];
199                          3    3        2      2      3
200 (%o3)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
201 (%i4) [aa : cc, bb : dd, cc : 17, dd : 29];
202 (%o4)                   [cc, dd, 17, 29]
203 (%i5) foo_1 (x) := aa - bb * x;
204 (%o5)                 foo_1(x) := aa - bb x
205 (%i6) foo_1 (10);
206 (%o6)                      cc - 10 dd
207 (%i7) ''%;
208 (%o7)                         - 273
209 (%i8) ''(foo_1 (10));
210 (%o8)                         - 273
211 (%i9) foo_2 (x) := ''aa - ''bb * x;
212 (%o9)                 foo_2(x) := cc - dd x
213 (%i10) foo_2 (10);
214 (%o10)                        - 273
215 (%i11) [x0 : x1, x1 : x2, x2 : x3];
216 (%o11)                    [x1, x2, x3]
217 (%i12) x0;
218 (%o12)                         x1
219 (%i13) ''x0;
220 (%o13)                         x2
221 (%i14) '' ''x0;
222 (%o14)                         x3
223 @end example
225 式の演算子にクォートクォートを用いると、(もし動詞でないなら)演算子は名詞から動詞に変わります。
227 @c ===beg===
228 @c declare (foo, noun);
229 @c foo (x) := x - 1729;
230 @c foo (100);
231 @c ''foo (100);
232 @c ===end===
233 @example
234 (%i1) declare (foo, noun);
235 (%o1)                         done
236 (%i2) foo (x) := x - 1729;
237 (%o2)                 ''foo(x) := x - 1729
238 (%i3) foo (100);
239 (%o3)                       foo(100)
240 (%i4) ''foo (100);
241 (%o4)                        - 1629
242 @end example
244 クォートクォート演算子は入力パーサが適用します;
245 クォートクォート演算子はパースされた入力式の一部としては格納されません。
247 @c ===beg===
248 @c [aa : bb, cc : dd, bb : 1234, dd : 5678];
249 @c aa + cc;
250 @c display (_, op (_), args (_));
251 @c ''(aa + cc);
252 @c display (_, op (_), args (_));
253 @c ===end===
254 @example
255 (%i1) [aa : bb, cc : dd, bb : 1234, dd : 5678];
256 (%o1)                 [bb, dd, 1234, 5678]
257 (%i2) aa + cc;
258 (%o2)                        dd + bb
259 (%i3) display (_, op (_), args (_));
260                            _ = cc + aa
262                          op(cc + aa) = +
264                     args(cc + aa) = [cc, aa]
266 (%o3)                         done
267 (%i4) ''(aa + cc);
268 (%o4)                         6912
269 (%i5) display (_, op (_), args (_));
270                            _ = dd + bb
272                          op(dd + bb) = +
274                     args(dd + bb) = [dd, bb]
276 (%o5)                         done
277 @end example
279 関数定義やラムダ式、シングルクォート@code{'}でクォートされた式の中のように
280 通常評価が抑制される時も、
281 クォートクォートがあると評価を実行します。
283 @c ===beg===
284 @c foo_1a (x) := ''(integrate (log (x), x));
285 @c foo_1b (x) := integrate (log (x), x);
286 @c dispfun (foo_1a, foo_1b);
287 @c integrate (log (x), x);
288 @c foo_2a (x) := ''%;
289 @c foo_2b (x) := %;
290 @c dispfun (foo_2a, foo_2b);
291 @c F : lambda ([u], diff (sin (u), u));
292 @c G : lambda ([u], ''(diff (sin (u), u)));
293 @c '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
294 @c '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
295 @c ===end===
296 @example
297 (%i1) foo_1a (x) := ''(integrate (log (x), x));
298 (%o1)               foo_1a(x) := x log(x) - x
299 (%i2) foo_1b (x) := integrate (log (x), x);
300 (%o2)           foo_1b(x) := integrate(log(x), x)
301 (%i3) dispfun (foo_1a, foo_1b);
302 (%t3)               foo_1a(x) := x log(x) - x
304 (%t4)           foo_1b(x) := integrate(log(x), x)
306 (%o4)                      [%t3, %t4]
307 (%i5) integrate (log (x), x);
308 (%o5)                     x log(x) - x
309 (%i6) foo_2a (x) := ''%;
310 (%o6)               foo_2a(x) := x log(x) - x
311 (%i7) foo_2b (x) := %;
312 (%o7)                    foo_2b(x) := %
313 (%i8) dispfun (foo_2a, foo_2b);
314 (%t8)               foo_2a(x) := x log(x) - x
316 (%t9)                    foo_2b(x) := %
318 (%o9)                      [%t7, %t8]
319 (%i10) F : lambda ([u], diff (sin (u), u));
320 (%o10)             lambda([u], diff(sin(u), u))
321 (%i11) G : lambda ([u], ''(diff (sin (u), u)));
322 (%o11)                  lambda([u], cos(u))
323 (%i12) '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
324 (%o12)         sum(b , k, 1, 3) + sum(a , k, 1, 3)
325                     k                  k
326 (%i13) '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
327 (%o13)             b  + a  + b  + a  + b  + a
328                     3    3    2    2    1    1
329 @end example
331 @opencatbox
332 @category{Evaluation}
333 @category{Operators}
334 @closecatbox
335 @end deffn
337 @c NEEDS WORK, ESPECIALLY EXAMPLES
338 @deffn {関数} alias (@var{new_name_1}, @var{old_name_1}, ..., @var{new_name_n}, @var{old_name_n})
339 (利用者もしくはシステム)関数や変数、配列等に対して別名を与えます。
340 任意の偶数個の引数を取ります。
342 @opencatbox
343 @category{Declarations and inferences}
344 @closecatbox
345 @end deffn
347 @c NEEDS CLARIFICATION
348 @c VERY IMPORTANT !!
350 @c -----------------------------------------------------------------------------
351 @anchor{ev}
352 @deffn {関数} ev (@var{expr}, @var{arg_1}, @dots{}, @var{arg_n})
354 引数@var{arg_1}, @dots{}, @var{arg_n}で指定された環境下で
355 式@var{expr}を評価します。
356 引数は、スイッチ(ブーリアンフラグ)だったり、割り当てだったり、
357 等式だったり、関数だったりします。
358 @var{ev}は評価の結果(別の式)を返します。
360 評価は以下のようにステップを追って実行されます。
362 @enumerate
363 @item
364 最初に、以下の任意のもしくはすべての引数をスキャンして環境を準備します。
366 @itemize @bullet
367 @item
368 @mref{simp}を引数に指定すると@var{expr}を整理します。@code{false}なら整理を抑制するスイッチ@code{simp}の設定に関わらずです。
369 @item
370 @mref{noeval}を引数に指定すると@code{ev}の評価フェイズを抑制します。
371 (以下のステップ(4)を参照してください。)
372 これは、他のスイッチとの連携時や、@var{expr}を再評価せずに再整理をさせる時に役に立ちます。
373 @item
374 @mref{nouns}を引数に指定すると@var{expr}の中の名詞形式
375 (典型的には、@code{'integrate}や@code{'diff}のような未評価関数)を評価します。
376 @item
377 @mref{expand}を引数に指定すると展開します。
378 @item
379 @code{expand (@var{m}, @var{n})}を引数に指定すると、
380 @mref{maxposex}と@mref{maxnegex}の値をそれぞれ@var{m}と@var{n}に設定して、展開します。
381 @item
382 @mref{detout}を引数に指定すると、@var{expr}の中で計算されるどんな逆行列も、逆行列の外側に行列式を保つようにします。
383 @item
384 @mref{diff}を引数に指定すると@var{expr}の中のすべての微分を実行します。
385 @item
386 @code{derivlist (@var{x}, @var{y}, @var{z}, ...)}を引数に指定すると指定された変数に関する微分のみを実行します。
387 @item
388 @code{risch}を引数に指定すると
389 @var{expr}の中の積分をRischアルゴリズムを使って評価します。
390 @mref{risch}を参照してください。
391 特殊なシンボル@mref{nouns}を使った時には標準の積分ルーチンが呼び出されます。
392 @item
393 @mref{float}を引数に指定すると非整数有理数を浮動小数点に変換します。
394 @item
395 @mref{numer}を引数に指定すると数値引数が指定された(指数関数を含む)いくつかの数学関数を浮動小数点に評価します。
396 また、@var{expr}の中の numerval宣言された変数は、宣言された値に置き換えられます。
397 また、@mref{float}スイッチをオンにします。
398 @item
399 @mref{pred}を引数に指定すると述語(@code{true}もしくは@code{false}に評価される式)を評価します。
400 @item
401 @mref{eval}を引数に指定すると@var{expr}の特別な後評価をします。(ステップ(5)を参照。)
402 @code{eval}は複数回起こるかもしれません。@code{eval}のそれぞれのインスタンスのために、式は再評価されます。
403 @item
404 評価フラグ(@mref{evflag}を参照)として宣言されたアトム@code{A}を引数に指定すると、
405 @var{expr}の評価の最中、@code{A}が@code{true}にバインドされます。
406 @item
407 @code{V: expression}(もしくは代わりに@code{V=expression})を引数に指定すると、
408 @var{expr}の評価の最中、@code{V}が@code{expression}の値にバインドされます。
409 もし@code{V}がMaximaオプションなら、@var{expr}の評価の最中、@code{V}の値に@code{expression}が使われることに注意してください。
410 もし@code{ev}の複数の引数がこのタイプの場合、並列してバインドされます。
411 もし@code{V}が非アトムの式なら、バインドではなく、代入が実行されます。
412 @item
413 関数名 @code{F}が評価関数(@mref{evfun}参照)として宣言されている場合、
414 @code{F}を引数に指定すると @code{F}が @var{expr}に適用されます。
415 @item
416 他のどんな関数名(例えば、@mref{sum})でも引数に指定すると、
417 @var{expr}の中にそれらの名前が現れた時それらが動詞であるかのように評価します。
418 @item
419 加えて、exprの中で出現する関数(@code{F(x)}としましょう)を、
420 @var{expr}の今回の評価の目的のため、
421 @code{F(X) := expression}を@code{ev}の引数に与えて、局所的に定義することができます。
422 @item
423 もし以上で言及しなかったアトム、添字付き変数、または、添字付き式が引数として与えられたら、
424 それを評価して、
425 もしその結果が等式もしくは割り当てであったら、示されたバインドもしくは代入を実行します。
426 もしその結果がリストなら、リストのメンバが、 @code{ev}に与えられた追加の引数であるかのように扱います。
427 これにより、 @mref{solve}が返すような、与えられた等式のリスト
428 (例えば、 @code{[X=1,Y=A**2]})や
429 等式の名前のリスト(例えば、 @code{[%t1, %t2]}。ここで @code{%t1}, @code{%t2}は等式)が使えます。
430 @end itemize
432 @code{ev}の引数は、代入等式と評価関数以外はどんな順序で与えてもかまいません。
433 代入等式は左から右へ順に扱われ、
434 評価関数は、例えば、 @code{ev (@var{expr}, ratsimp, realpart)}は
435 @code{realpart (ratsimp (@var{expr}))}と扱われるように、合成されます。
437 @mref{simp}, @mref{numer}, @mref{float}スイッチは、ブロックの中でローカルにも、
438 またMaximaの中でグローバルにも設定でき、その場合,リセットされるまで効果を保ちます。
440 @code{numer}と@code{float}スイッチがともに@code{true}でない場合、
441 もし@var{expr}が標準有理式(CRE)なら、@code{ev}が返す式もまたCREです。
443 @item
444 step (1)の最中に、引数の中のもしくは引数の値の、等式の左辺に現れる添字なしの変数のリストを作ります。
445 @var{expr}の中の変数(添字なし変数や配列関数に関連づけられていない添字付き変数)は、
446 先のリストに現れるものを除いて、グローバルな値に置き換えられます。
447 普通、 @var{expr}は、ただのラベルだったり
448 (以下の例の @code{%i2}のように) @code{%}だったりするので、
449 その場合,このステップは単にラベルされた式を取り出し、
450 @code{ev}はその式に対して機能することになります。
452 @item
453 引数で指定されたどんな代入文もすぐ実行されます。
455 @item
456 (引数で@mref{noeval}が指定されていない限り)結果の式は再評価され、
457 引数に従って整理されます。
458 @var{expr}の中のどんな関数コールもその中の変数が評価された後実行されること、
459 @code{ev(F(x))}は @code{F(ev(x))}のように振る舞うことに注意してください。
461 @item
462 引数の中の@mref{eval}のそれぞれのインスタンスのために、step (3)(4)を繰り返します。
463 @end enumerate
465 例:
467 @c ===beg===
468 @c sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
469 @c ev (%, numer, expand, diff, x=2, y=1);
470 @c ===end===
471 @example
472 (%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
473                                      d                    2
474 (%o1)              cos(y) + sin(x) + -- (sin(w)) + (w + 1)
475                                      dw
476 (%i2) ev (%, numer, expand, diff, x=2, y=1);
477                              2
478 (%o2)              cos(w) + w  + 2 w + cos(1) + 2.449599732693821
479 @end example
481 @code{ev}のために、代わりのトップレベルの文法が提供されています。
482 それによって、@code{ev()}なしに引数をタイプして入力するだけでよくなります。
483 すなわち、単に以下のように書けます。
485 @example
486 @var{expr}, @var{arg_1}, ..., @var{arg_n}
487 @end example
489 これは、例えば、関数やブロックの中など、他の式の一部としては許されません。
491 以下の例では並列のバインドプロセスに注意してください。
493 @example
494 (%i3) programmode: false;
495 (%o3)                                false
496 (%i4) x+y, x: a+y, y: 2;
497 (%o4)                              y + a + 2
498 (%i5) 2*x - 3*y = 3$
499 (%i6) -3*x + 2*y = -4$
500 (%i7) solve ([%o5, %o6]);
501 Solution
503                                           1
504 (%t7)                               y = - -
505                                           5
507                                          6
508 (%t8)                                x = -
509                                          5
510 (%o8)                            [[%t7, %t8]]
511 (%i8) %o6, %o8;
512 (%o8)                              - 4 = - 4
513 (%i9) x + 1/x > gamma (1/2);
514                                    1
515 (%o9)                          x + - > sqrt(%pi)
516                                    x
517 (%i10) %, numer, x=1/2;
518 (%o10)                      2.5 > 1.772453850905516
519 (%i11) %, pred;
520 (%o11)                               true
521 @end example
523 @opencatbox
524 @category{Evaluation}
525 @closecatbox
526 @end deffn
528 @c -----------------------------------------------------------------------------
529 @anchor{eval}
530 @defvr {特殊シンボル} eval
532 @code{ev (@var{expr})}のコールの引数として、
533 @code{eval}は
534 @var{expr}の追加の評価をもたらします。
535 @mref{ev}を参照してください。
537 例:
539 @c ===beg===
540 @c [a:b,b:c,c:d,d:e];
541 @c a;
542 @c ev(a);
543 @c ev(a),eval;
544 @c a,eval,eval;
545 @c ===end===
546 @example
547 (%i1) [a:b,b:c,c:d,d:e];
548 (%o1)                            [b, c, d, e]
549 (%i2) a;
550 (%o2)                                  b
551 (%i3) ev(a);
552 (%o3)                                  c
553 (%i4) ev(a),eval;
554 (%o4)                                  e
555 (%i5) a,eval,eval;
556 (%o5)                                  e
557 @end example
559 @opencatbox
560 @category{Evaluation flags}
561 @closecatbox
562 @end defvr
564 @c -----------------------------------------------------------------------------
565 @anchor{evflag}
566 @defvr {プロパティ} evflag
568 シンボル@code{x}が@code{evflag}プロパティを持つ時、
569 式@code{ev(@var{expr}, @var{x})}や対話プロンプトでの@code{@var{expr}, @var{x}}は、
570 @code{ev(@var{expr}, @var{x} = true)}と同値です。
571 すなわち、@var{expr}が評価される間、@var{x}は@code{true}にバインドされます。
573 式@code{declare(@var{x}, evflag)}は、変数@var{x}に@code{evflag}プロパティを与えます。
575 デフォルトで@code{evflag}プロパティを持つフラグは以下の通りです:
576 @c FOLLOWING LIST CONSTRUCTED FROM LIST UNDER (prog1 '(evflag properties) ...)
577 @c NEAR LINE 2649 OF mlisp.lisp AT PRESENT (2004/11).
579 @verbatim
580    algebraic          cauchysum       demoivre
581    dotscrules         %emode          %enumer
582    exponentialize     exptisolate     factorflag
583    float              halfangles      infeval
584    isolate_wrt_times  keepfloat       letrat
585    listarith          logabs          logarc 
586    logexpand          lognegint       lognumer 
587    m1pbranch          numer_pbranch   programmode 
588    radexpand          ratalgdenom     ratfac 
589    ratmx              ratsimpexpons   simp 
590    simpproduct        simpsum         sumexpand
591    trigexpand
592 @end verbatim
594 例:
596 @c ===beg===
597 @c sin (1/2);
598 @c sin (1/2), float;
599 @c sin (1/2), float=true;
600 @c simp : false;
601 @c 1 + 1;
602 @c 1 + 1, simp;
603 @c simp : true;
604 @c sum (1/k^2, k, 1, inf);
605 @c sum (1/k^2, k, 1, inf), simpsum;
606 @c declare (aa, evflag);
607 @c if aa = true then YES else NO;
608 @c if aa = true then YES else NO, aa;
609 @c ===end===
610 @example
611 (%i1) sin (1/2);
612                                  1
613 (%o1)                        sin(-)
614                                  2
615 (%i2) sin (1/2), float;
616 (%o2)                   0.479425538604203
617 (%i3) sin (1/2), float=true;
618 (%o3)                   0.479425538604203
619 (%i4) simp : false;
620 (%o4)                         false
621 (%i5) 1 + 1;
622 (%o5)                         1 + 1
623 (%i6) 1 + 1, simp;
624 (%o6)                           2
625 (%i7) simp : true;
626 (%o7)                         true
627 (%i8) sum (1/k^2, k, 1, inf);
628                             inf
629                             ====
630                             \     1
631 (%o8)                        >    --
632                             /      2
633                             ====  k
634                             k = 1
635 (%i9) sum (1/k^2, k, 1, inf), simpsum;
636                                  2
637                               %pi
638 (%o9)                         ----
639                                6
640 (%i10) declare (aa, evflag);
641 (%o10)                        done
642 (%i11) if aa = true then YES else NO;
643 (%o11)                         NO
644 (%i12) if aa = true then YES else NO, aa;
645 (%o12)                         YES
646 @end example
648 @opencatbox
649 @category{Evaluation flags}
650 @category{Simplification flags and variables}
651 @closecatbox
652 @end defvr
654 @c -----------------------------------------------------------------------------
655 @anchor{evfun}
656 @defvr {プロパティ} evfun
658 関数@var{F}が@code{evfun}プロパティを持つ時、
659 式@code{ev(@var{expr}, @var{F})}や(対話プロンプトでの)@code{@var{expr}, @var{F}}は、
660 @code{@var{F}(ev(@var{expr}))}と同値です。
662 もし2つ以上の@code{evfun}関数@var{F}, @var{G}などが指定されたなら、関数は指定された順に適用されます。
664 式@code{declare(@var{F}, evfun)}は、関数@var{F}に@code{evfun}プロパティを与えます。
666 デフォルトで@code{evfun}プロパティを持つ関数は以下の通りです:
667 @c FOLLOWING LIST CONSTRUCTED FROM LIST UNDER (prog1 '(evfun properties) ...)
668 @c NEAR LINE 2643 IN mlisp.lisp AT PRESENT (2004/11).
670 @verbatim
671    bfloat          factor       fullratsimp
672    logcontract     polarform    radcan
673    ratexpand       ratsimp      rectform
674    rootscontract   trigexpand   trigreduce
675 @end verbatim
677 例:
679 @c ===beg===
680 @c x^3 - 1;
681 @c x^3 - 1, factor;
682 @c factor (x^3 - 1);
683 @c cos(4 * x) / sin(x)^4;
684 @c cos(4 * x) / sin(x)^4, trigexpand;
685 @c cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
686 @c ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
687 @c declare ([F, G], evfun);
688 @c (aa : bb, bb : cc, cc : dd);
689 @c aa;
690 @c aa, F;
691 @c F (aa);
692 @c F (ev (aa));
693 @c aa, F, G;
694 @c G (F (ev (aa)));
695 @c ===end===
696 @example
697 (%i1) x^3 - 1;
698                               3
699 (%o1)                        x  - 1
700 (%i2) x^3 - 1, factor;
701                                 2
702 (%o2)                 (x - 1) (x  + x + 1)
703 (%i3) factor (x^3 - 1);
704                                 2
705 (%o3)                 (x - 1) (x  + x + 1)
706 (%i4) cos(4 * x) / sin(x)^4;
707 @group
708                             cos(4 x)
709 (%o4)                       --------
710                                4
711                             sin (x)
712 @end group
713 (%i5) cos(4 * x) / sin(x)^4, trigexpand;
714                  4           2       2         4
715               sin (x) - 6 cos (x) sin (x) + cos (x)
716 (%o5)         -------------------------------------
717                                 4
718                              sin (x)
719 (%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
720                            2         4
721                       6 cos (x)   cos (x)
722 (%o6)               - --------- + ------- + 1
723                           2          4
724                        sin (x)    sin (x)
725 (%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
726                            2         4
727                       6 cos (x)   cos (x)
728 (%o7)               - --------- + ------- + 1
729                           2          4
730                        sin (x)    sin (x)
731 (%i8) declare ([F, G], evfun);
732 (%o8)                         done
733 (%i9) (aa : bb, bb : cc, cc : dd);
734 (%o9)                          dd
735 (%i10) aa;
736 (%o10)                         bb
737 (%i11) aa, F;
738 (%o11)                        F(cc)
739 (%i12) F (aa);
740 (%o12)                        F(bb)
741 (%i13) F (ev (aa));
742 (%o13)                        F(cc)
743 (%i14) aa, F, G;
744 (%o14)                      G(F(cc))
745 (%i15) G (F (ev (aa)));
746 (%o15)                      G(F(cc))
747 @end example
749 @opencatbox
750 @category{Evaluation flags}
751 @closecatbox
752 @end defvr
754 @c NEEDS WORK
756 @c -----------------------------------------------------------------------------
757 @anchor{infeval}
758 @defvr {オプション変数} infeval
760 「無限評価」モードにします。@code{ev}は、値が変わらなくなるまで式を繰り返し評価します。
761 このモードで変数(@code{X}とします)が評価されることを避けるには、単に@code{X='X}を@code{ev}の引数として含めます。
762 @code{ev (X, X=X+1, infeval)}のような式は、もちろん、無限ループを引き起こします。
764 @opencatbox
765 @category{Evaluation flags}
766 @closecatbox
767 @end defvr
769 @c NEEDS CLARIFICATION, EXAMPLES
770 @c NEED TO MENTION THIS IS AN evflag
772 @c -----------------------------------------------------------------------------
773 @anchor{noeval}
774 @defvr {特殊シンボル} noeval
776 @code{noeval}は、@mref{ev}の評価フェイズを抑制します。
777 これは、他のスイッチとの関連や、
778 式を再評価することなしに再整理するのに役に立ちます。
780 @opencatbox
781 @category{Evaluation flags}
782 @closecatbox
783 @end defvr
785 @c NEEDS CLARIFICATION, EXAMPLES
787 @c -----------------------------------------------------------------------------
788 @anchor{nouns}
789 @defvr {特殊シンボル} nouns
791 @code{nouns}は@mref{evflag}の1つです。
792 @mref{ev}コマンドのオプションとして使われる時、
793 @code{nouns}は、式の中に現れる「名詞」形すべてを「動詞」に@mref{ev}します。すなわち、それらを評価します。
794 @mref{noun}, @mref{nounify}, @code{verb}, @mref{verbify}も参照してください。
796 @opencatbox
797 @category{Evaluation flags}
798 @category{Nouns and verbs}
799 @closecatbox
800 @end defvr
802 @c -----------------------------------------------------------------------------
803 @anchor{pred}
804 @defvr {特殊シンボル} pred
806 @code{ev (@var{expr})}のコールでの引数として、
807 @code{pred}は、
808 述語論理(@code{true}または@code{false}に評価される式)を評価するようにします。
809 @mref{ev}を参照してください。
811 例:
813 @c ===beg===
814 @c 1<2;
815 @c 1<2,pred;
816 @c ===end===
817 @example
818 (%i1) 1<2;
819 (%o1)                                1 < 2
820 (%i2) 1<2,pred;
821 (%o2)                                true
822 @end example
824 @opencatbox
825 @category{Evaluation flags}
826 @closecatbox
827 @end defvr