[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8. 入出力

8.1 入出力について  
8.2 ファイル  
8.3 後戻し  
8.4 入出力に関する諸定義  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 入出力について


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.2 ファイル

- ファイルは単にデータやテキストを含む特定の保存デバイス上の領域である。 MCマシン上で用いられる保存デバイスはディスクとテープのみである。ディスク上 のファイルは"ディレクトリ"へと図示的にグループ分けされている。ディレクトリは 与えられた利用者名の下で蓄えられた全てのファイルのリストである。MACSYMAを 用いてファイルをどの様に調べるのか、その詳細はDESCRIBE(FILEOP);を実行せよ。

他のファイル操作の命令は: SAVE,FASSAVE,STORE,LOAD,LOADFILE,RESTORE,UNSTORE,STRINGOUT,BATC, BATCON,DEMO,WRITEFILE,CLOSEFILE,DELFILE,REMFILEとAPPENDFILEである。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.3 後戻し

ウインドウのスクロールダウンで入力行の後戻し(playback)が可能で、現在の作業を 失なう事も無い。これは関数Eを入力する事で実行が可能である。開始すべき行数を 数値引数で尋ねると、それ以外は40行遡る事となる。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4 入出力に関する諸定義

変数: %
MACSYMAで計算された最新のD行 (それが出力されていようがいまいが)。 (%%も見よ)。

変数: %%
この値は(MACSYMA-BREAK)の間に処理された最新の値である。(n-1)番目の文の値を n番目の文で参照で参照すると云った文の組合せで用いる時に便利である。

例えば、
 
F(N):=(INTEGRATE(X^N,X),SUBST(3,X,%%)-SUBST(2,X,%%)); 

は本質的に

F(N):=BLOCK([%%], %%:INTEGRATE(X^N,X),SUBST(3,X,%%)-SUBST(2,X,%%));
と同値である。これは(n-1)番目とn番目の(非原子的)BLOCK文の間の通信についても 動作する。

変数: %EDISPFLAG
デフォルト値:[FALSE] - TRUEであれば、MACSYNAは負の羃乗に対して%Eを商の形式で 表示する。つまり、%E^-Xを1/%E^Xとする。

関数: %TH (i)
i番前の計算結果。つまり、次の計算すべき式がD(j)であれば、これはD(j-1)である。 これはBATCHファイルの中やD式の集合を参照するのに便利である。例えば、SUMが0と して初期化されていれば、FOR I:1 THRU 10 DO SUM:SUM+%TH(I)は、その最後の10個の D式の和をSUMに設定する。

特殊記号: "?"
- 関数や変数の前置詞として、関数や変数がLISPの表記であって、MACSYMAの表記では 無い事を識別する。二つの疑問符??はMACSYMAの現行のMACSYMAの命令行の内容を空に する。

変数: ABSBOXCHAR
デフォルト値:[!]は式の回りで絶対値を描く為に用いる。これらは精々一行の高さ しか無い。

関数: APPENDFILE (filename1, filename2, DSK, directory)
WRITEFILE(DSK,directory)に似ているが、最初の二つの引数で指定した名前の ファイルに追加を行う。これに引き続くCLOSEFILEはもとのファイルを削除し、 その内容が追加されたファイルで置き換える。

関数: BACKUP ()
"バックアップ"に用いる。何が出来るかはPLAYBACKを参照せよ。

関数: BATCH (file-specification)
ファイルを読み、ファイル中のMACSYMA命令行を評価する - 通常のオンラインモード ではなく、ディスク上に保管された命令行を実行する機能。この機能は幾つかの 利用法があり、実行中の命令行、与えられたエラーの無いデモに対しては貯水池と しての役割を提供し、複雑な問題を解く際に修正をテキストエディタで行いながら 思考を纏めて行く事を支援する。

バッチファイルはMACSYMAの命令行の集まりから構成され、各々の行の末尾には;か$ があり、これらは、スペース、キャリッジ-リターン(CR)、フォーム-フィード等で 分けられていても良い。BATCH関数は一度にファイルから命令行を読み、それらを 利用者の端末に表示して実行する。深刻なエラーが生じた場合と、ファイル末端に 達した場合にのみ、利用者の端末側に制御が戻される。勿論、利用者はどの時点でも Control-Gを押せば、このファイル処理を止められる。BATCHファイルはテキスト エディタやSTRINGOUT命令を用いて構築しても良い。詳細はDESCRIBE(STRINGOUT)を 実行せよ。DESCRIBE(FILE);とDESCRIBE(FILES);にはファイル引数がどの様に解釈さ れるかと云ったファイルの一般的な追加情報がある。

変数: BATCHKILL
デフォルト値:[FALSE] - TRUEであれば、次のバッチファイルを読み込む際に KILL(ALL)とRESET()が自動的に実行される為、それ以前の全てのバッチファイルの 影響が無効にされる。BATCHKILLが他の原子であれば、BATCHKILLの値でKILLが実行 される。

関数: BATCHLOAD (file-specification)
端末出力やラベル無しで、静かにファイルのバッチ処理を行う。

関数: BATCON (argument)
中断されたファイルのバッチ処理を再開する。

変数: BATCOUNT
デフォルト値:[0] - ファイルからのバッチ処理された最後の式の番号を設定する。 それ故、BATCON(BATCHCOUNT-1)は以前の処理から、最新のBATCH処理された前の式の BATCH処理を温存する。

変数: BOTHCASES
デフォルト値:[TRUE] - TRUEであればMAXIMAは大文字と同様に、小文字のテキストを 保つ。しかし、MAXIMAの特別な変数や関数の名前は大文字である事に注意する。 デフォルト値は現在TRUEであるが、それはコードをより読み易くし、SeriesSolveの 様な名前を利用者が使える様にする為である。

この理由で全て大文字でシステム変数と関数を構築した為、利用者は(大文字や小文字 であろうが)好きに入力して良い。しかし、全ての他の変数と関数は微妙である。 例えば、grind(fundef(f))を用いてプログラムを表示した時、'IF','SIN',...の様な 文字は全て大文字となり、非システム文字は利用している書式で表示される事となる。

これは次の様に実装されている:文字が最初に現われると、その大文字のものが パッケージに含まれており、非自明な関数や属性リストを持っていれば、大文字が 用いられ、大文字と小文字が混ざっている場合には、今後、大文字を使う様に記録 される。もし、文字が既にパッケージにあれば、それが用いられる。

これは最も古いプログラムが動作する事を継続しなけばならず、新しいものはsIn, Sin,SIN,sin等と書かれるかもしれないが、それらは全てSINとして解釈される事を 意味する。しかし、それらがMySinと書かれた場合、これはMYSINとは違う。何故なら、 MYSINはシステム関数でも変数でも無い為である。

 
SeriesSolve(f,x):=
   if (f = sin) ...

は次の様にも読める

SeriesSolve(f,x):=
   IF (f = SIN) ...

変数: CHANGE_FILEDEFAULTS
デフォルト値:[TRUE] - PDP10システム上ではTRUE、それ以外はFALSEである。 LOADFILEやBATCHを実行する利用者が、デフォルトのファイルからLOADFILEやBATCHで 処理されたファイルに変更するかどうかを制御する。TRUEであれば、DDT風の デフォルトのファイルが好みの人向け。FALSEであれば、他のオペレーティング システム様式、LISP風のデフォルトのファイルや利用者のデフォルトのファイルと 矛盾してはならないLOADFILEやBATCHを実行するパッケージを書く人向けである。

関数: CLOSEFILE (filename1, filename2)
WRITEFILEで開かれたファイルを閉じ、filename1 filename2と云う名前を与える (LISPマシンでは、CLOSEFILE();のみが必要である)。ここで、MACSYMAを用いたある セッション一部で、全ての入出力の表示を含むファイルの保存を行う為、利用者は WRITEFILEを実行してから、MACSYMAで処理を行い、そして、CLOSEFILEを実行する。 以前の結果の表示を保存する為に、WRITEFILEの後に利用者はPLAYBACK関数を実行する 事も可能である(保存されたものは式の表示の複写であって、式そのものでは無い事に 注意せよ)。内部形式で実際の式を保存する為にはSAVE関数を利用する。そして、式は LOADFILE関数を用いてMACSYMAに戻す事が可能である。後にBATCHで利用可能な様に 行書式で式を保存する為にSTRINGOUT関数が使われている。

関数: COLLAPSE (expression)
全ての共通(つまり、等しい)部分式を共有する(つまり、同じセルを用いる)事で引数 を潰し、領域を節約する(COLLAPSEはOPTIMIZE命令で用いられるサブルーチンである)。 それ故、FASSAVEを使う前やSAVEで保存したファイルを読み込んだ後にCOLLAPSEを 呼出す事は便利である。

COLLAPSE([expr1,...,exprN])$を用いて、幾つかの式を一緒に潰す事も可能である。 同様に、COLLAPSE(LISTARRAY('A))$とする事で、配列の成分を潰す事も出来る。

関数: CONCAT (arg1, arg2, ...)
その引数を評価し、それらの名前や引用された値を結合したものを返す。その形式は 第一引数のそれで与えられる。例えば、Xに1が束縛され、Dが不定値であれば、 CONCAT(X,2)="12"とCONCAT(D,X+1)=D2となる。

関数: SCONCAT (arg1, arg2, ...)
引数を評価し、それらを文字列に結合する。CONCATとは違い、引数が原子である必要 は無い。結果はCommon Lispの文字列となる。
 
(C5) sconcat("xx[",3,"]:",expand((x+y)^3));
(D5) 			 xx[3]:Y^3+3*X*Y^2+3*X^2*Y+X^3
その返される文字列は表示と組合せて使える。

変数: CURSORDISP
デフォルト値:[TRUE] - TRUEであれば式が論理的列として描かれる。これはカーソル の移動が可能なコンソールでのみ動作する。FALSEであれば、式は行から行へと単純に 表示される。CURSORDISPはWRITEFILEが有効であればFALSEになる。

変数: DIREC
- この変数の値はSAVE,STORE,FASSAVEとSTRINGOUTのデフォルト値のファイル ディレクトリである。利用者がディスクディレクトリを持っている場合はログイン名、 それ以外はUSERiディレクトリの一つに初期化される。DIRECはディスクファイルが 書き込まれるディレクトリを決める。

関数: DISP (expr1,expr2, ...)
DISPLAYに似ているが、方程式よりも引数の値のみを表示する。名前を持たないものや 引数の値のみが必要で名前は不要と云った複雑な引数に対して便利である。

関数: DISPCON (tensor1,tensor2,...)
DEFCONに対して与えられたtensoriの縮約属性を表示する。DISPCON(ALL)は定義されて いる全ての縮約属性を表示する。

関数: DISPLAY (expr1, expr2, ...)
方程式を表示する。その左側が未評価のexpriで、その右側の行の中心がその式の値 となる。この関数はBLOCKやFOR文で、中途結果の表示を行うのに便利である。 DISPLAYの引数は通常、原子、下添字された変数や関数呼出しである(DISP関数を見よ)。

 
(C1) B[1,2]:X-X^2;

                                         2
(D1)                                X - X
(C2) display(B[1,2]);

                                             2
                                B     = X - X
                                 1, 2

(D2)                                 DONE

変数: DISPLAY2D
デフォルト値:[TRUE] - FALSEであれば、標準表示が二次元的書式ではなく、一次元 的文字列書式となる。紙に出力する際に紙を節約したい利用者にとって利点がある だろう。

 
(* 訳者注:

(C36) integrate(f(x),x,0,inf);
                                  INF
                                 /
                                 [
(D36)                            I    f(x) dx
                                 ]
                                 /
                                  0
(C37) display2d:false;
(D37) FALSE
(C38) integrate(f(x),x,0,inf);
(D38) 'INTEGRATE(f(x),x,0,INF)

*)

変数: DISPLAY_FORMAT_INTERNAL
デフォルト値:[FALSE] - TRUEが設定されていれば、式が内部の数学的表現を隠した 方式に変換されずに出力される。その為、出力はPART命令では無く、INPART命令に 対応したものとなる。

 
例:

User     PART       INPART
a-b;      A - B     A + (- 1) B
           A            - 1
a/b;       -         A B
           B
                       1/2
sqrt(x);   SQRT(X)    X
          4 X        4
X*4/3;    ---        - X
           3         3

関数: DISPTERMS (expr)
引数の成分を一つづづ、一つの成分を表示すると下に次の成分を表示して行く。 つまり、最初に'expr'の演算子が表示され、和の各項、積の因子、より一般の式の 成分が分離されて表示される。これは、exprが表示にとても大きい時には便利である。 例えば、P1,P2,...がとても大きな式であれば、表示プログラムはP1+P2+...を一度に 表示しようとして、保存領域を使い果してしまうかもしれない。しかし、 DISPTERMS(P1+P2+...)はP1を表示し、その下にP2等々となる。DISPTERMSを利用しな い時、もし、指数式がA**Bの様に表示にはとても大きい場合、EXPT(A,B)(又は、A^^B の場合はNCEXPT(A,B))の様に表示される。

変数: DSKALL
デフォルト値:[] - TRUEであれば値、関数、配列と規則がラベル付けされた式を付け 加えて周期的にディスクに書き込む。TRUEはデフォルト値で、DSKALLがFALSEであれば、 ラベル付けされた式のみが書かれる。

変数: ERROR_SIZE
デフォルト値:[表示端末に対しては20,その他は10]。 エラーメッセージの大きさを制御する。例えば、U:(C^D^E+B+A)/(COS(X-1)+1);であれ ば、Uは24のエラーの大きさを持つ。そこで、ERROR_SIZEが<24の値であれば

 
(C1) ERROR("The function", FOO,"doesn't like", U,"as input.");
は、次の様に表示される:

The function FOO doesn't like ERREXP1 as input.

もし、ERROR_SIZE>24であれば;
                                 E
                                D
                               C   + B + A
The function FOO doesn't like -------------- as input.
                              COS(X - 1) + 1

となる。

ERROR_SIZEよりも大きな式は文字列で置換され、文字列には式が設定されている。 文字列は利用者が設定可能なリストから取られる。
 
ERROR_SYMS:[ERREXP1,ERREXP2,ERREXP3]

このスイッチのデフォルト値は利用者の経験に依存するもののに換えても良い。 デフォルト値が大き過ぎたり小さ過ぎたりすれば、MACSYMAにメイルを送る事。

変数: ERROR_SYMS
デフォルト値:[ERREXP1,ERREXP2,ERREXP3] - エラーメッセージで、ERROR_SIZEよりも 大きな式は文字列で置換され、その文字列には式が設定されている。文字列は ERROR_SYMSリストから取られて初期値はERREXP1,ERREXP2,ERREXP3等々となっている。 エラーメッセージが表示された後、例えば、 "The function FOO doesn't like ERREXP1 as input."であれば、ERREXP1;と利用者が 入力すれば、その式を見る事が出来る。ERROR_SYMSは、もしも望むならば、利用者が 別の文字列を設定しても構わない。

関数: EXPT (A,B)
指数式がA^Bとして表示されるのに余りにも大きな場合、EXPT(A,B)(A^^Bの場合は NCEXPT(A,B))として表示する。

変数: EXPTDISPFLAG
デフォルト値:[TRUE] - TRUEであれば、MACSYMAは負の指数項を分数を用いた式で表示 する。例えば、X**(-1)は1/Xとなる。

関数: FASSAVE (args)
SAVEに似ているがFASLファイルを生成する。このFASLファイルには核で共有されている 部分式が共有されたままで生成されたファイルに保存される。そこで、共通部分式を 持つ式は、SAVEよりも、FASSAVEで生成されたファイルを読み込めば、より小さな領域 の消費で済ませる。FASSAVEで生成されたファイルはSAVEで生成されたものと同様に LOADFILEを用いて読み込まれる。FASSAVEは [<ファイル名>,<ブロックでファイルの大きさ>,...]の書式のリストを返す。ここで、 "..."は保存された物である。警告は、大きなファイルの場合に表示される。FASSAVE はWRITEFILEが実行中であっても利用して構わない。

関数: FILEDEFAULTS ()
現行のデフォルトファイル名、特定のMACSYMAの実装によって用いられるどの書式で あるかを返す(書式が何であるかについてはDESCRIBE(FILE)を見よ)。これはLOADFILE、 BATCHや他の多くのファイルにアクセスする命令で用いられるファイルの指定である。

FILEDEFAULTS('file) - 現行のファイルデフォルトを"file"に設定する。

FILEDEFAULTSの引数は、命令が主にプログラム内部で使われると予想される時に評価 される。"file"は実在のファイルである必要は無いので、この関数を、例えば、本当 の目的が単にその他の設定に気に掛ける事の無い何処の"device"欄に設定するもので あっても良い。

変数: FILENAME
デフォルト値:[] - この変数の値が、自動ディスク保存手法によって生成される第一 のファイルの名前である。デフォルト値は利用者のログイン名の最初の3文字と用いら れていない最も値の低い整数との結合、例えばECR1となる。

関数: FILENAME_MERGE ("filename1","filename2",...);
互いのファイル名の混合を行う。これの意味する事は、"filename1"を返すのは、 "filename2"に見当たらない成分が無い時で、そして、それらが見当たらなければ、 filename3からとなる。

変数: FILENUM
デフォルト値:[0] - 利用者によってファイル名が指定されていない場合、SAVE, STRINGOUTやFASSAVEによって生成される第二のデフォルトのファイル名である。 整数であれば、新しいファイルが書かれた各時点で一つづつ増される。

変数: FILE_SEARCH
- これはLOADや他の多くの関数によって検索されるディレクトリ名のファイルのリスト である。このデフォルト値はMACSYMAによって利用される様々なSHAREディレクトリの リストとなる。

FILE_SEARCH("filename");は FILE_SEARCH_LISP、FILE_SEARCH_MAXIMAと FILE_SEARCH_DEMO変数で指定されたディレクトリやデバイス上の検索を行い、最初に 見付けたファイルの名前を返す。この関数はLOAD関数によって呼出される。そんな 訳で、LOAD("FFT")がshare/fft.macを見付けて読込が行える。適当なリストに対して 検索経路を加えても良い。検索経路の書式は指定する複数の拡張や複数の検索経路を 許容する事に注意せよ。

 
"/home/wfs/###.{o,lisp,mac,mc}"
"/home/{wfs,joe}/###.{o,lisp,mac,mc}"

この'###'は渡された実際のファイル名で置き換えられる。FILE_SEARCHは様々な パターンで代入される前に、渡された検索経路上に実際に名前が存在するか どうかを最初に検査をする。

 
(* 訳者注:
maxima(<5.9pre)のソースファイルではsrc/init_max1.lispでデフォルト値の設定が
行われている。
*)

変数: FILE_STRING_PRINT
デフォルト値:MCでは[FALSE]、それ以外では[TRUE]。 TRUEであれば、ファイル名は文字列、FALSEであれば、リストとして出力される。 例えば、核のファイルがMACSYMAに読み込まれた時(例えば、LIMITパッケージ)、 MCではリストの書式が次の様になる、

 
  LIMIT FASL DSK MACSYM being loaded

そして文字列の書式は次の様になる;

  DSK:MACSYM;LIMIT FASL being loaded

文字列書式はトップレベル(DDT)ファイル指定に似ている。

関数: FILE_TYPE ("filename");
ファイルの種類に依存して、FASL、LISPやMACSYMAを返す。FASLはCOMPILEで翻訳され たLISPファイルで、通常、拡張子.VASをNILで持つ。

関数: GRIND (arg)
argをSTRING命令よりも、より読み易い書式で表示する。値としてD行を返す。 GRINDスイッチは、デフォルト値:[FALSE]で、TRUEであれば、STRING、STRINGOUT、 PLAYBACK命令で"string"モードの代りに"grind"命令を用いる。PLAYBACKでは、 "grind"モードがオプションとしてGRINDを指定する事で(入力行処理に対して)、 オンにする事が出来る。

変数: IBASE
デフォルト値:[10] - 入力数値に関するベース。

変数: INCHAR
デフォルト値:[C] - 利用者が入力する式の名前の前に置かれるアルファベット。

 
(訳者注:
つまり、入力行の先端のプロンプトの文字の事。

(C1) inchar;

(D1)                                  C
(C2) inchar:ZZ;

(D2)                                 ZZ
(ZZ2) 1+1;

(D2)                                  2
(ZZ3) 

の様に、デフォルトのCからZZ等に変更出来る。
*)

関数: LDISP (expr1,expr2,...)
DISPに似ているが、中間ラベルも生成する。

関数: LDISPLAY (expr1,expr2,...)
DISPLAYに似ているが、中間ラベルも生成する。

変数: LINECHAR
デフォルト値:[E] - 中間表示された式の名前の前に置かれるアルファベット。

変数: LINEDISP
デフォルト値:[TRUE] - 方程式の描写を文字でグラフ表示する事を、それらを提供 するシステム上で許容する。これはLINEDISPがFALSEに設定していれば無効になる。 WRITEFILEが実行中であれば自動的に無効になっている。

変数: LINEL
デフォルト値:[] - 一行に表示される文字数。最初にMACSYMAが利用される端末の 種類(知られている限り)の行長を設定するが、利用者は何時でも再設定して良い。 利用者はDDTで:TCTYPを用いて再設定する必要があるかもしれない。

関数: LOAD ("filename");
"文字列"(つまり、引用符でマークされたものの内側)や、リスト(例えば、鈎括弧の中) で表わされたファイル名を1つの引数とし、指定したファイルの読み込みを行う。 ディレクトリが指定されていなければ、SHAREiディレクトリやFILE_SEARCH変数の リストの中の全ての他のディレクトリを検索し、指定されたファイルを読み込む。 LOAD("EIGEN")で、固有値パッケージの読み込みを行い、そのパッケージが コンパイルされたものか、変換されたものか、SAVEや或いはFASSAVEで保存された もの、つまり、LOADがLOADFILEやBATCHファイルの両方で動作するものであるかどうか を利用者が細かく注意する必要無しに読み込みを行う。

注意:LOADは、ファイルがBATCH処理に対応している事を見付けると、BATCHLOADを用い る(これは、"黙って"端末に出力やラベルを出力せずにファイルのBATCH処理を実行す る事を意味している)。

他のファイルのロードを行うMACSYMA命令は:LOADFILE、RESTORE、BATCHとDEMOがある。 詳細はDESCRIBE(命令);を実行せよ。LOADFILEとRESTOREはSAVEで書込んだファイルに 対して動作する;BATCHとDEMOはSTRIGNOUTで書込まれたり、テキストエディタで命令の リストとして生成されたファイル向けである。

もし、LOADがファイルを見付ける事が出来なければ、FILE_SEARCHの値が適切な雛型を 含んでいるかを確認せよ。

 
例えば、

(C4) load("eigen");
MACSYMA BUG: Unknown file type NIL

Error: macsyma error
Error signalled by MEVAL1.
Broken at $LOAD.  Type :H for Help.
MAXIMA>>:q

であれば、ファイルシステムを調べてファイルが実際に/public/maxima/share/eigen.mc
にある事を見付けたとする。それから、ファイル検索パスにそれを追加する。これは
起動時(システムディレクトリのsys-init.lspを見よ。)か、局所的なディレクトリと
検索経路名でカスタマイズされ、一度再保存されたシステムで実行可能となる。

LISPの階層では、次の様にする

(in-package "MAXIMA")
(setq $file_search ($append (list '(mlist)
        "/tmp/foo.mac" "/tmp/foo.mc") $file_search))

そして、MAXIMAの階層では:

(C5) file_search:append(["/public/maxima/share/foo.mc"],
        file_search)$

とする。
(* 訳者注:

大域変数file_searchにfoo.mcのパスをAPPENDしている事に注目。
尚、ソースレベルでの追加はsrc/init_max1.lispに行う。
*)

(C6) load("eigen");

 /usr/public/maxima/share/eigen.mcのバッチ処理の実行

(D6) 		        #/public/maxima/share/eigen.mc
(C7) eigenvalues(matrix([a,b],[c,d]));
	       2		    2
       - SQRT(D  - 2 A D + 4 B C + A ) + D + A
(D7) [[---------------------------------------, 
			  2

				      2			   2
				SQRT(D  - 2 A D + 4 B C + A ) + D + A
				-------------------------------------], [1, 1]]
						  2
(C8) 

関数: LOADFILE (filename)
その引数によって指定されたファイルを読み込む。この関数は以前のMACSYMAの処理 からSAVEやSTORE関数で保存された値をMAXIMAに入れ直す為に用いて良い。検索経路 名の指定はオペレーティングシステムの検索経路名の指定に沿って行う。例えば、U NIXでは"/home/wfs/foo.mc"となる。

変数: LOADPRINT
デフォルト値:[TRUE] - ファイルの読込みとそれに伴うメッセージの表示を制御する。 次のオプションが利用可能である:TRUEであれば、メッセージが常に表示される事を 意味する;

関数: NOSTRING (arg)
後戻しを行っている時に、全ての入力行をSTRINGで文字列にする代りにその表示を 行う。argがGRINDであれば、その表示はより読み易い書式となる。 PLAYBACK([5,10],20,TIME,SLOW)の様に、任意の数のオプションを入れて良い。

変数: OBASE
デフォルト値:[10] - 数字の表示に関するベース。

変数: OUTCHAR
デフォルト値:[D] - 出力式の名前の先頭に付けられるアルファベット。

 
(訳者注:
(C1) 1+1;

(D1)                                   2
の様に、結果が表示される行のD*の事。
*)

変数: PACKAGEFILE
デフォルト値:[FALSE] - SAVE,FASSAVEやTRANSLATEを用いて他の人が利用する為のパッケージ(ファイル)を作成 する人はPACKAGEFILE:TRUE$と設定して、ファイルが読み込まれる時点で必要な場所を 除いた情報がMACSYMAの情報リスト(例えばVALUES,FUNCTIONS)に追加される事を避けた いかもしれない。この方法でパッケージに含まれる物は、利用者のデータを付け加え た時に利用者の側では得られない。これは可能性のある名前の衝突の問題を解決する ものでは無い事に注意せよ。スイッチは単にパッケージファイルへの出力に影響を与 える事にも注意せよ。スイッチをTRUEに設定するとMACSYMAの初期化ファイルの生成に も便利である。

変数: PARSEWINDOW
デフォルト値:[10] - "辞書式表記"の最大数で、構文エラーが生じた場合、エラーの 発生した個所の両端が表示される。このオプションは遅い端末ではとても便利である。 -1を設定すると、全体の入力文字列が構文(解析)エラーが発生した時に表示される。

変数: PFEFORMAT
デフォルト値:[FALSE] - TRUEであれば、有理数は行の中で表示され、整数の分母は 有理数の積として表示される。

 
(訳者注: 
入力がb/4であれば、1/4*bと表示される事。但し、a/bの様に、a,bが不定元であれば、
通常のプリティプリントで表示される
*)

関数: PRINT (exp1, exp2, ...)
次々と"行で"左端の位置から引数の評価と表示を行う。もし、expiが不定か、 シングルクオートが前に置かれていたり、"で閉じられていた場合は、そのまま表示 される。例えば、PRINT("THE VALUE OF X IS",X)。PRINTによって返される値は最新の 引数値である。中間行は生成されない("表示"ファイルについては、PRINTFILE関数を 見よ)。

関数: SPRINT (exp1, exp2, ...)
引数の評価と表示を、次々と"行の"左端から開始する。数は'-'の右隣りで表示され、 行の長さは無視される。

関数: TCL_OUTPUT (LIST INDEX &optional-skip)
INDEXを展開したLISTに対応するTCLのリストを表示する。ここで、飛ばし(skip)の 初期値は2で、引数がリストで構成されたリストでは無く、数値リスト形式の場合、 飛ばしから外れた全ての要素が表示される。

 
例えば:
TCL_OUTPUT([x1,y1,x2,y2,x3,y3],1) --> {x1 x2 x3 }
TCL_OUTPUT([x1,y1,x2,y2,x3,y3],2) --> {y1 y2 y3 }
TCL_OUTPUT([1,2,3,4,5,6],1,3) --> {1 4}
TCL_OUTPUT([1,2,3,4,5,6],2,3) --> {2 5}
となる。

関数: READ (string1, ...)
引数を表示して、それから一つの式の読み込みと評価を行う。例えば、 A:READ("ENTER THE NUMBER OF VALUES")。

関数: READONLY (string1,...)
引数を表示して、それから式を読み込む(式はREADと違って評価されない)。

関数: REVEAL (exp,depth)
指定された整数depthに対して指定された各々の成分の長さでexpを表示する。和は Sum(n)、積はProduct(n)として表示される。ここでnは和や積の成分の数である。 指数関数はExptとして表示される。
 
(C1) INTEGRATE(1/(X^3+2),X)$
(C2) REVEAL(%,2);
(D2)                    Negterm + Quotient + Quotient
(C3) REVEAL(D1,3);
                                     ATAN         LOG
(D3)                 - Quotient + ---------- + ----------
                                  Product(2)   Product(2)


 
(* 訳者補足:
次の例の様に、depthで指定された階層までの式を表示する。

(C14) aa:INTEGRATE(1/(X^3+2),X)$

(C15) aa;

                                                 1/3
                                          2 X - 2
                                    ATAN(------------)
               2    1/3      2/3          1/3                     1/3
          LOG(X  - 2    X + 2   )        2    SQRT(3)    LOG(X + 2   )
(D15)   - ----------------------- + ------------------ + -------------
                     2/3                2/3                    2/3
                  6 2                  2    SQRT(3)         3 2
(C16) reveal(aa,1);

(D16)                               Sum(3)
(C17) reveal(aa,2);

(D17)                    Negterm + Quotient + Quotient
(C18) reveal(aa,3);

                                     ATAN         LOG
(D18)                - Quotient + ---------- + ----------
                                  Product(2)   Product(2)
(C19) reveal(aa,4);

                       LOG       ATAN(Quotient)   LOG(Sum(2))
(D19)             - ---------- + -------------- + -----------
                    Product(2)     Expt SQRT        3 Expt
(C20) reveal(aa,5);

                                      Sum(2)
                               ATAN(----------)
                 LOG(Sum(3))        Product(2)    LOG(X + Expt)
(D20)          - ----------- + ---------------- + -------------
                   6 Expt         2/3                   2/3
                                 2    SQRT(3)        3 2
(C21) 

*)

変数: RMXCHAR
デフォルト値:[]] - 行列の(右)の括弧として表示する文字(LMXCHARも見よ)。

関数: SAVE (filename,arg1, arg2,...,argi)
その引数によって記述されたものをディスクに保存し、それらをMaximaの核にも 保っておく。引数argiはSAVEで保存される式である。ALLとすれば最も単純だが、ALL ではMACSYMAの殆どの内容を保存するので、膨大な計算では結果として膨大なファイル となりかねない事に注意する。VALUES、FUNCTIONSやINFOLISTSの他の任意の項目 (そのリストについてはDESCRIBE(INFOLISTS)を実行せよ)を関数と変数は名前で保存し ても良い。C行とD行もまた保存されるが、それらに明示的な名前、例えば、 SAVE(RES1=D15);を命令行で与えた方がより良い。SAVEで保存されたファイルは LOADFILEで再びLOADしなければならない。SAVEは項目が保存された検索経路名を返す。

変数: SAVEDEF
デフォルト値:[TRUE] - TRUEであれば、関数がTRANSLATEで変換された時に、 MACSYMAの利用者関数のバージョンをそのままにする。これは定義をDISPFUNで表示 される事を許可し、そして関数が編集される事も許容する。SAVEDEFがFALSEであれば、 変換された関数の名前はFUNCTIONSリストから削除される。

関数: SHOW (exp)
expを添字されたオブジェクトで表示し、その際、共変添字を下添字、反変添字は 上添字とする。微分添字は下添字として表示され、コンマによって共変添字は分離 されている。

関数: SHOWRATVARS (exp)
expのRATVARS(CRE変数)のリストを返す。

変数: STARDISP
デフォルト値:[FALSE] - TRUEであれば、積演算に対して*をちゃんと表示する。

 
(* 訳者注:

以下に示す様にデフォルトでは積に*は表示されない。この*を表示させる為のスイッチ
である。

(C2) STARDISP;
(D2)                                 FALSE
(C3) sin(x)*exp(-2*pi*x);
                                 - 2 pi x
(D3)                           %E         SIN(x)
(C4) stardisp:true;
(D4)                                 TRUE
(C5) sin(x)*exp(-2*pi*x);
                                 - 2*pi*x
(D5)                           %E        *SIN(x)
*)

関数: STRING (expr)
式をMACSYMAの行表示(FORTRANのものと似ている)に変換し、あたかも、それが入力 されて編集が出来る様にexprをバッファに入れる(式が通常Ciのである場合)。 STRINGで文字列に変換した式を計算に使ってはならない。

関数: STRINGOUT (args)
式をファイルに行書式で出力する。この様なファイルはBARCHやDEMO命令で用いられる。 STRINGOUT(file-specification, A1, A2, ...)はfile-specification ([filename1,filename2mDSK,directory])で与えられたファイルに対し、A1,A2,...で 与えられた値をMACSYMAで読む事の出来る書式で出力する。file-specificationは省略 しても良いが、この場合、デフォルト値が用いられる。Aiは通常Cラベルだが全ての Cラベルの値を意味するINPUTでも良い。他のオプションは、利用者の関数定義の全て をSTRINGOUTで出力させる事になる関数にaiとする。(つまり、全てはDISPFUN(ALL)に よって裸にされている)。aiが値であっても良いのと同様に、利用者が値を指定した 全ての変数もSTRINGOOUTで出力される。aiはmからnに含まれる全てのラベルとして リスト[m,n]としても良い。この関数は、STRINGOUTで出力した式に幾らか手を加える 事でFORTRAN命令のファイルを構築する事にも使える。GRINDスイッチがTRUEであれば、 STRINGOUTはSTRING形式では無く、GRIND形式を用いる。注意:STRINGOUTは、WRITEFILE の処理中でも実行して良い。

関数: TEX (expr)
関数: TEX(expr,filename)
関数: TEX(label,filename)

ラベルの場合は左側の式のラベル番号が生成される。ファイル名が与えられた場合、 その出力はファイルの末尾に追加される。

 
(C1) integrate(1/(1+x^3),x);

					 2 x - 1
		       2	    ATAN(-------)
		  LOG(x  - x + 1)	 SQRT(3)    LOG(x + 1)
(D1) 	        - --------------- + ------------- + ----------
			 6	       SQRT(3)	        3
(C2) tex(d1);
$$-{{\log \left(x^{2}-x+1\right)}\over{6}}+{{\arctan {{2\>x-1}\ov
 \sqrt{3}}}}\over{\sqrt{3}}}+{{\log \left(x+1\right)}\over{3}}

(D2) 				     (D1)
(C6) tex(integrate(sin(x),x));

$$-\cos x$$
(D6) 				     FALSE
(C7) tex(d1,"/tmp/jo.tex");

(D7) 				     (D1)
ここで最後の式はファイル`/tmp/jo.tex'の末尾に追加される。

関数: SYSTEM(command)
commandを副プロセスとして実行する。commandの実行の為にデフォルトでシェルに 渡される。SYSTEMは全てのオペレーティングシステムで使える訳では無いが、UNIX 環境であれば一般的に存在する。例えば、histをxgraphを用いて棒線表示をしたい 頻度リストとする。
 
      with_stdout("_hist.out",
           for i:1 thru length(hist) do (
             print(i,hist[i]))),
      system("xgraph -bar -brw .7 -nl < _hist.out")
背後で表示を行ない、(制御をMaximaに戻して)実行後にテンポラリファイルを削除 する。
 
system("(xgraph -bar -brw .7 -nl < _hist.out;  rm -f _hist.out)&")

変数: TTYOFF
デフォルト値:[FALSE] - TRUEであれば制御端末側への出力を止める。

マクロ: WITH_STDOUT(file,stmt1,stmt2,...)
ファイルを開き、stm1,stm2,...の評価を行う。標準出力への任意の表示は端末の代り にファイルに送られ、端末側には常にFALSEが戻る。
 
mygnuplot(f,var,range,number_ticks):=
 block([numer:true],
 with_stdout("/tmp/gnu",
   for x:range[1] thru range[2] step
                (range[2]-range[1])/number_ticks
      do (print(x,at(f,var=x)))),
 system("echo \"set data style lines; set title '",
        f,"' ;plot '/tmp/gnu'
;pause 10 \" | gnuplot"));

(C8) with_stdout("/home/wfs/joe",
      n:10,
      for i:8 thru n
        do(print("factorial(",i,") gives ",i!)));
(D8) 				     FALSE
(C9) system("cat /home/wfs/joe");
factorial( 8 ) gives  40320 
factorial( 9 ) gives  362880 
factorial( 10 ) gives  3628800 
(D9) 				       0

関数: WRITEFILE (DSK, directory)
ファイルを書き込み用に開く。LISPマシンではWRITEFILE("filename")を用いる。全て の利用者とMACSYMAとの間の作用は丁度端末側で行うのと同様にファイルに記録される。 この様なファイルはMACSYMAによる処理の翻案であり、MACSYMAに再び読み込ませたり、 バッチ処理で用いる事は出来ない(CLOSEFILEを見よ)。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Hiroshi Yokota on September, 16 2002 using texi2html