=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/exp/exp-ja.texi,v retrieving revision 1.19 retrieving revision 1.27 diff -u -p -r1.19 -r1.27 --- OpenXM/src/asir-doc/exp/exp-ja.texi 2005/05/04 00:08:38 1.19 +++ OpenXM/src/asir-doc/exp/exp-ja.texi 2008/11/11 08:18:50 1.27 @@ -1,4 +1,4 @@ -%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.18 2004/11/24 23:00:23 takayama Exp $ +%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.26 2008/01/29 05:42:05 takayama Exp $ \input texinfo @iftex @catcode`@#=6 @@ -38,7 +38,7 @@ @title 実験的仕様の関数 @subtitle Risa/Asir 実験的仕様関数説明書 @subtitle 1.0 版 -@subtitle 2005 年 5 月 +@subtitle 2008 年 1 月 @author by Risa/Asir committers @page @@ -121,6 +121,7 @@ ChangeLog の項目は www.openxm.org の cvswe * set_print_function:: * small_jacobi:: * flatten_quote:: +* printf:: * sprintf:: * quote_to_funargs:: * funargs_to_quote:: @@ -128,6 +129,26 @@ ChangeLog の項目は www.openxm.org の cvswe * remove_paren:: * set_secure_mode:: * set_secure_flag:: +* initialize_static_variable:: +* eval_quote:: +* nqt_match:: +* nqt_match_rewrite:: +* qt_normalize:: +* qt_set_coef:: +* qt_set_ord:: +* qt_set_weight:: +* nqt_comp:: +* qt_is_var:: +* qt_is_ceof:: +* qt_rewrite:: +* asirgui.hnd:: +* noro_matrix.rr: +* f_res:: +* chdir:: +* pwd:: +* dcurrenttime:: + + @end menu @comment --- ◯◯◯◯ 関数 quotetotex, quotetotex_env の説明 ◯◯◯◯ @@ -1082,13 +1103,13 @@ ChangeLog @end itemize -@node quote_flatten,,, 実験的仕様の関数 -@subsection @code{quote_flatten} -@findex quote_flatten +@node flatten_quote,,, 実験的仕様の関数 +@subsection @code{flatten_quote} +@findex flatten_quote @comment --- 関数の簡単な説明 --- @table @t -@item quote_flatten(@var{q},@var{op}) +@item flatten_quote(@var{q},@var{op}) :: quote の括弧をとりさる. @end table @@ -1111,8 +1132,11 @@ Quote 型のデータは木構造をしている たとえば (1+2)+(3+4) という表現を 1+2+3+4 に変換する. @item 現在の実装では n-ary の演算子は定義されていないので, - 1+2+3 は実は (1+2)+3 と表現されている. - つまり + 演算子は左結合的である. + 1+2+3 は実は 1+(2+3) と表現されている. + つまり + 演算子は右結合的である. +@item R=0; for (I=0; I @var{Exprt2} なら 1. +@item @var{Expr1} < @var{Exprt2} なら -1. +@item @var{Expr1} = @var{Exprt2} (おなじ順序) なら 0. +@end itemize + +@example +ctrl("print_quote",2); +qt_set_ord([y,x]); qt_set_weight([[x,-1],[y,-1]]); +[nqt_comp(`x,`y), nqt_comp(`y,`x), nqt_comp(`x,`x)]; + 出力: [-1,1,0] +@end example + +@table @t +@item 参照 +@ref{qt_normalize}, +@ref{qt_set_ord}, +@ref{qt_set_weight} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item まだ書いてない. +@end itemize @comment **************************************************************** + +@node qt_is_var,,, 実験的仕様の関数 +@subsection @code{qt_is_var}, @code{qt_is_coef} +@findex qt_is_var +@findex qt_is_coef + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_is_var(@var{Expr}) +:: @var{Expr} が不定元に対応する quote なら 1 を戻す. +@item qt_is_coef(@var{Expr}) +:: @var{Expr} が係数の有理関数体に属するとき 1 を戻す. +@end table + +@table @var +@item return +整数 +@item Expr +quote型 +@end table + +@itemize @bullet +@item @var{Expr} が不定元に対応する quote なら 1 を戻す. +そうでないとき 0 を戻す. +@end itemize + +@example +[qt_is_var(quote(x)), qt_is_var(quote(3/2))]; + 出力: [1,0] +@end example + +@table @t +@item 参照 +@ref{qt_rewrite}, +@ref{nqt_match_rewrite} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item -----まだ書いてない. +@end itemize +@comment **************************************************************** + +@node qt_rewrite,,, 実験的仕様の関数 +@subsection @code{qt_rewrite} +@findex qt_rewrite + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item qt_rewrite(@var{Expr},@var{Rules},@var{Mode}) +:: @var{Expr} を規則集合 @var{Rules} を用いて書き換える. +@end table + +@table @var +@item return +quote型 +@item Expr +quote型 +@item Rules +リスト +@item Mode +整数 +@end table + +@itemize @bullet +@item ユーザ言語を用いて定義された関数. +@code{import("noro_rewrite.rr")} しておくこと. +(noro_rewrite.rr が OpenXM/lib/asir-contrib に存在しない場合 +ソースの OpenXM/src/asir-contrib/testing/noro/new_rewrite.rr をコピー) +@item @var{Expr} を規則集合 @var{Rules} を用いて書き換える. +@item 規則の適用は fnode木に対して再帰的である. + 一方 @code{nqt_match_rewrite} ではトップレベルのみに規則が適用される. +@item 規則集合 @var{Rules} の各要素の書き方は @code{nqt_match()} の +@var{Pattern} と同じ書き方. +つまり [パターン, 書き換え結果] または +[パターン, 条件, 書き換え結果]. +@item @var{Mode} の意味は @ref{qt_normalize} の @var{Mode} と同様. +パターンマッチ, 書き換えは @var{Mode} で @code{qt_normalize()} +されてから遂行される. +@end itemize + +注意: 数学的には X*Y=Y*X が可換性を与える規則だが, これをそのまま規則として + 与えると書き換えが停止しない. 次の例では, 上の例のように順序比較し, たとえば, + 順序が大きくなる場合のみに書き換えるべきである. +@example +import("noro_rewrite.rr"); +R=[[`X*Y,`nqt_comp(Y*X,X*Y)>0, `Y*X]]; +qt_rewrite(`(x-y)^2,R,2); + 出力: quote(x*x+-2*x*y+y*y) +@end example + +外積代数の計算 (asir-contrib をロードした状態). +@example +import("noro_rewrite.rr"); +Rext0=[quote(X*Y),quote(qt_is_var(X) && qt_is_var(Y) && nqt_comp(Y,X)>0), + quote(-Y*X)]; +Rext1=[quote(X^N),quote(eval_quote(N)>=2),quote(0)]; +Rext2=[quote(X*X),quote(0)]; +Rext=[Rext0,Rext1,Rext2]; +qt_rewrite(quote( (x+2*y)*(x+4*y) ), Rext,1); + 出力: 2*x*y + +qt_set_coef([a,b,c,d]); +qt_rewrite(quote((a*x+b*y)*(c*x+d*y)), Rext,1); + 出力: (d*a-c*b)*x*y + +@end example + +微分の計算 (asir-contrib をロードした状態). +@example +import("noro_rewrite.rr"); +qt_set_coef([a,b]); +Rd1=[`d(X+Y), `d(X)+d(Y)]; +Rd2=[`d(X*Y),`d(X)*Y+X*d(Y)]; +Rd3=[`d(N), `qt_is_coef(N), `0]; +Rd4=[`d(x),`1]; +Rd=[Rd1,Rd2,Rd3,Rd4]; +B=qt_rewrite( `d( (a*x+b)^3),Rd,2); + 出力: quote(3*a^3*x*x+6*b*a^2*x+3*b^2*a) +fctr(eval_quote(B)); + 出力: [[3,1],[a,1],[a*x+b,2]] +@end example + +@table @t +@item 参照 +@ref{nqt_match}, +@ref{nqt_match_rewrite}, +@ref{qt_normalize} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item qt 系の関数の原型は OpenXM/src/asir-contrib/testing/tr.rr である. +このユーザ言語による開発が 2005年の春まで行われ, そのあと組み込み関数主体の +qt 系の関数が開発された. +@item qt 系の関数についてのその他の参考文献: + OpenXM/doc/Papers/2005-rims-noro.tex および + OpenXM/doc/Papers/2005-rims-noro.tm (TeXmacsの記事). +@item Todo: qt 系の関数を用いたおもしろい計算を Risa/Asir ジャーナルの記事として書く. +@end itemize +@comment **************************************************************** + + +@comment **************************************************************** +@node asirgui.hnd,,, 実験的仕様の関数 +@subsection @code{asirgui.hnd} +@findex asirgui.hnd + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item asirguid.hnd +:: asirgui の main window のハンドル番号を保持するファイル +@end table + + +@itemize @bullet +@item asirgui (Windows 版) を起動すると asirgui.exe のあるフォルダおよび 環境変数 TEMP が定義されていればこのファイルが作成される. +@item 中身は10進整数で, asirgui の main winodw のハンドルである. このハンドルあてに PostMessage をすれば, asuirgui にキーボードから入力したのと同様な効果が得られる. +@item text editor で作成, 保存したファイルを text editor 側から asirgui に読み込ませたりするために利用可能. +@end itemize + +@example +// Visual C++ 用のテストプログラム. 標準入力を asirgui へ送り込む. +// test.cpp : コンソール アプリケーション用のエントリ ポイントの定義 +// + +#include "stdafx.h" +#include "test.h" +#include +#include +#include +#include +#include + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// 唯一のアプリケーション オブジェクト + +CWinApp theApp; + +using namespace std; + +int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) +{ + int nRetCode = 0; + + // MFC の初期化および初期化失敗時のエラーの出力 + if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) + { + // TODO: 必要に応じてエラー コードを変更してください。 + cerr << _T("Fatal Error: MFC initialization failed") << endl; + nRetCode = 1; + } + else + { + // TODO: この位置にアプリケーションの動作を記述してください。 + CString strHello; + strHello.LoadString(IDS_HELLO); + cout << (LPCTSTR)strHello << endl; + } + HWND hnd; + FILE *fp = fopen("c:/Program Files/asir/bin/asirgui.hnd","r"); + fscanf(fp,"%d",&hnd); + fclose(fp); + while (1) { + int c; + c = getchar(); + if ( c == '#' ) break; + PostMessage(hnd,WM_CHAR,c,1); + } + return nRetCode; +} +@end example + +@table @t +@item 参照 +@ref{xyz_abc} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この機能は 2006-12-5, 2007-02-13 に加えられた. +@item @code{OpenXM_contrib2/windows/asir32gui/asir32gui.clw} 1.11 +@item @code{OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp} 1.15, 1.1.6 +@end itemize +@comment **************************************************************** + +@node noro_matrix.rr,,, 実験的仕様の関数 +@subsection @code{noro_matrix.rr} +@findex noro_matrix.rr + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item linalg.unit_mat(@var{arg1}) +@item linalg.random_rmat(@var{arg1}, @var{arg2}, @var{arg3}) +@item linalg.minipoly_mat(@var{arg1}) +@item linalg.compute_kernel(@var{arg1}) +@item linalg.compute_image(@var{arg1}) +@item linalg.jordan_canonical_form(@var{arg1}) +@end table + + +@itemize @bullet +@item 簡単な解説および実例は http://www.math.kobe-u.ac.jp/HOME/taka/2007/knx/noro_matrix-ja.txt を参照. +@end itemize + +@example +load("noro_matrix.rr"); +A=newmat(4,4,[[2,0,0,0],[3,5,1,0],[-9,-9,-1,0],[-5,0,0,1]]); +B=linalg.jordan_canonical_form(A); +@end example + +@table @t +@item 参照 +@ref{invmat} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2004-04 頃から線形代数III の講義をしながら書かれた. +@item ソース: OpenXM/src/asir-contrib/packages/src/noro_matrix.rr +@end itemize + + +@node f_res,,, 実験的仕様の関数 +@subsection @code{f_res} +@findex f_res + +@comment --- 関数の簡単な説明 --- +@table @t +@item f_res +@end table + + +@itemize @bullet +@item f_res は各種の終結式を計算するモジュールである. ox_grep("f_res"); で online manual を閲覧可能である. +@end itemize + +@table @t +@item 参照 +@ref{} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item このモジュールは Fujiwara 君の修士論文が元になり, それを改造したものである. +@item OpenXM/src/ox_cdd, OpenXM/src/asir-contrib/packages/src/f_res.rr +@end itemize + + +@node chdir,,, 実験的仕様の関数 +@subsection @code{chdir}, @code{pwd} +@findex chdir +@findex pwd + +@comment --- ディレクトリ操作 --- +@table @t +@item chdir(@var{directory}) +@item pwd() +:: シェルコマンド cd と pwd に対応する操作. +@end table + +@table @var +@item return +文字列(@code{pwd}), 整数(@code{chdir}) +@item dirctory +文字列 +@end table + +@itemize @bullet +@item +@code{pwd} はカレントディレクトリを文字列で返す. +@item +@code{chdir} はカレントディレクトリを @var{directory} に変更する. 成功すれば 0 を失敗すれば -1 を返す. +@item +これらの関数は UNIX 版にのみ実装されている. +@end itemize + +@example +[0] S=pwd(); +/home/ohara +[1] chdir(".../taka"); +-1 +[2] chdir("/usr/bin"); +0 +@end example + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item +これらの関数は 2008-8-27 にコミットされた. +変更をうけたソースコードは builtin/miscf.c (1.27) である. +@end itemize + + +@node dcurrenttime,,, 実験的仕様の関数 +@subsection @code{dcurrenttime} +@findex dcurrenttime + +@comment --- 現在時刻を取得 --- +@table @t +@item dcurrenttime() +:: 現在時刻を取得. +@end table + +@table @var +@item return +浮動小数点数 +@end table + +@itemize @bullet +@item +返り値は1970年1月1日0時0分0秒からの経過秒数である. +@end itemize + +@example +[0] ctrl("real_digit", 16); +16 +[1] dcurrenttime(); +1226390851.34476 +[2] currenttime(); +1226390854 +@end example + +@table @t +@item 参照 +@ref{currenttime} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2008-9-12 にコミットされた. +変更をうけたソースコードは builtin/time.c (1.6) である. +@end itemize + +@comment ----------- 以下は見本. 消すな. +@comment **************************************************************** @comment --- ◯◯◯◯ 以下他の関数について真似して記述する. ◯◯◯◯ @comment 新しい関数の説明を書くためのテンプレートである. 消すな. @comment --- ◯◯◯◯ 関数 syz_pqr, xyz_stu の説明 ◯◯◯◯ @@ -1532,7 +2519,6 @@ ChangeLog 変更をうけたソースコードは xxxyy.rr, ppp.c である. @item この関数は 2000 頃にはじめてのバージョンが書かれた. ソースは ppp.c である. @end itemize -@comment **************************************************************** @comment --- おまじない --- @node Index,,, Top