[BACK]Return to ox_math.tex CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_math / documents

Diff for /OpenXM/src/ox_math/documents/ox_math.tex between version 1.1 and 1.5

version 1.1, 1999/10/29 08:06:42 version 1.5, 2000/01/20 15:09:24
Line 1 
Line 1 
 %#!platex  %#!platex
 %% $OpenXM$  %% $OpenXM: OpenXM/src/ox_math/documents/ox_math.tex,v 1.4 1999/11/29 12:05:15 ohara Exp $
   
 \documentclass{jarticle}  \documentclass{jarticle}
 \title{Mathematica の Open XM 化について  \title{Mathematica の Open XM 化について
 % \\ {\small --- Open Mathematica サーバの内部構成 ---}  % \\ {\small --- Open Mathematica サーバの内部構成 ---}
 }  }
 %\date{January 19, 1999}  %\date{January 19, 1999}
 \date{July 12, 1999}  %\date{July 12, 1999}
   \date{November 25, 1999}
 \author{小原功任}  \author{小原功任}
   
 \begin{document}  \begin{document}
Line 32  MathLink ライブラリを利用して通信する。Open Mathmatica
Line 33  MathLink ライブラリを利用して通信する。Open Mathmatica
 つまり、Open XM 規約で定められたデータ形式を流用している.  つまり、Open XM 規約で定められたデータ形式を流用している.
 % cmo 構造体およびその派生クラスは/home/ohara/openxxx/lib/oxlib.h で定義さ  % cmo 構造体およびその派生クラスは/home/ohara/openxxx/lib/oxlib.h で定義さ
 % れている.  % れている.
 この方法の利点は open xm プロトコルを通して通信するにあたって  この方法の利点は Open XM プロトコルを通して通信するにあたって
 特にデータの変換を必要としないことである.  すなわちCMO の各データタイプ  特にデータの変換を必要としないことである.  すなわちCMO の各データタイプ
 は Open Mathematicaサーバ(スタックマシン)の内部でも, CMO として保持する  は Open Mathematicaサーバ(スタックマシン)の内部でも, CMO として保持する
 わけである.  わけである.
Line 47  CMO は 次のように変換されてから, MathLink を通して送ら
Line 48  CMO は 次のように変換されてから, MathLink を通して送ら
 \begin{enumerate}  \begin{enumerate}
 \item CMO\_INT32 は MLTKINT (多倍長整数型).  \item CMO\_INT32 は MLTKINT (多倍長整数型).
 \item CMO\_STRING は MLTKSTR (文字列型).  \item CMO\_STRING は MLTKSTR (文字列型).
   \item CMO\_LIST は MLTKFUNC (関数型).
 \item その他のタイプの CMO は ToExpression[文字列] として送る.  \item その他のタイプの CMO は ToExpression[文字列] として送る.
 \end{enumerate}  \end{enumerate}
   
Line 81  int main()
Line 83  int main()
 \]  \]
 という評価が行われ, 文字列データから整数が復元される.  という評価が行われ, 文字列データから整数が復元される.
   
 逆に, Mathematica から送られた整数データは,  逆に, Mathematica から送られた整数データは, マシン整数の範囲内であれば,
 マシン整数の範囲内であれば, int として  int として取得可能(MLGetInteger を使う)であるが, 受け取る前に int に収ま
 取得可能(MLGetInteger を使う)であるが,  るか否かを知ることはできない. int に収まらない場合、データが切り捨てられ
 受け取る前に int に収まるか否かを知ることはできない.  てしまうので注意が必要である.  また, 直接 CMO\_ZZ として取得することも不
 また, 直接 CMO\_ZZ として取得することも不可能である.  可能である.  (MathLink 上でどのような形式でデータ交換されているのかの情
 (MathLink 上でどのような形式でデータ交換されているのかの  報は手元にある資料からは得られなかった)
 情報は手元にある資料からは得られなかった)  
   
 しかしながら, たとえ Mathematica 側から整数データが送られていたとしても,  しかしながら, たとえ Mathematica 側から整数データが送られていたとしても,
 そのデータを文字列に変換して受け取ることは MathLink の機構上可能である.  そのデータを文字列に変換して受け取ることは MathLink の機構上可能である.
Line 110  int main()
Line 111  int main()
 }  }
 \end{verbatim}  \end{verbatim}
   
 つまり、Mathematica から整数データを文字列として受け取り、  つまり、Mathematica から整数データを文字列として受け取り、その文字列を
 その文字列を OX サーバ側で CMO\_ZZ に直している。  OX サーバ側で CMO\_ZZ に直している。
   
 基本的に MathLink では全てのデータを文字列で受け取るしか方法はない。どの  基本的に MathLink では全てのデータを文字列で受け取るしか方法はない。どの
 ような種類のデータであるかは受け取る前に知ることはできる。データの型は、  ような種類のデータであるかは受け取る前に知ることはできる。データの型は、
Line 131  SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMa
Line 132  SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMa
 で何もしない)である。  で何もしない)である。
   
 \section{Mathematica を OX のクライアントに}  \section{Mathematica を OX のクライアントに}
   OpenXM クライアントは Mathematica の外部プログラム({\tt math2ox})
   の形で実現されている。
   すなわち、Mathematica -- math2ox の間は MathLink プロトコルで、
   math2ox -- OpenXM サーバの間は OpenXM プロトコルで通信し、
   math2ox が適切に情報を変換しながらやりとりする。
   その意味で wrapper の一種であるとも言える。
   
   利用するには、最初に
 \begin{verbatim}  \begin{verbatim}
 In[1]:= Install["math2ox"]  In[1]:= Install["math2ox"]
 \end{verbatim}  \end{verbatim}
 とすると、外部プログラムをロードし、  として、math2ox をロードしなければならない。
   Mathematica に新たに定義されるコマンドは、
   {\tt OxStart[s\_String], OxStartInsecure[s\_String, p\_Integer, q\_Integer],
   OxExecuteString[s\_String], OxParse[s\_String], OxGet[],
   OxPopCMO[], OxPopString[], OxClose[], OxReset[]}
   の9つである。
   
   math2ox をロードしたら、
 \begin{verbatim}  \begin{verbatim}
 In[2] := OxStart["ox_sm1"]  In[2] := OxStart["ox_sm1"]
 \end{verbatim}  \end{verbatim}
 によって OpenXM サーバに接続する。接続先は ox\_sm1 である。  によって OpenXM サーバに接続する。この場合の接続先は ox\_sm1 である。
   もちろん
   \begin{verbatim}
   In[2] := OxStartInsecure["water.s.kanazawa-u.ac.jp", 1300, 1400]
   \end{verbatim}
   のようにして、insecure モードで接続してもよい。ただしこの場合は、
   あらかじめ {\tt Run[]} 等で、OpenXM サーバを起動しておかなければならない。
   
 接続が成功したら適当にデータを送ってみよう。  接続が成功したらデータを送ってみよう。
 利用できるコマンドは  
 {\tt OxStart[s\_String], OxExecute[s\_String], OxPopString[], OxClose[], OxReset[]}  
 の五つである。計算が終わったら、  
 \begin{verbatim}  \begin{verbatim}
 In[3] := OxClose[]  In[3] := OxParse["(CMO_LIST, (CMO_STRING, "hello world"), (CMO_ZERO))"]
 \end{verbatim}  \end{verbatim}
   のように CMO expression を指定することによって、
   任意の CMO を送信できる。
   正しくない CMO の場合には、何も送信されない。
   また、CMO ではなく、
   \begin{verbatim}
   In[4] := OxParse["(OX_COMMAND, (SM_popCMO))"]
   \end{verbatim}
   などとして、OX メッセージの形で記述することもできる。
   注意しなければならないのは、SM コマンドの場合、OX スタックマシンから
   OX メッセージが送られてくる場合があるが、OxParse[] を用いた場合、
   このメッセージは自動的には受信しない(現在の仕様では)。したがって明示的に
   受信する必要がある。そのためには
   \begin{verbatim}
   In[5] := OxGet[]
   \end{verbatim}
   とするだけでよい。返ってくるオブジェクトは CMO に対応するものである。
   \begin{verbatim}
   In[6] := OxPopCMO[]
   \end{verbatim}
   を用いる場合にはもちろん {\tt OxGet[]} を呼び出す必要はない。
   
   計算を実行するには {\tt OxExecute[]}
   (SM\_executeStringByLocalParser) か、適切な OX メッセージを送信すること。
   
   計算が終わったら、
   \begin{verbatim}
   In[7] := OxClose[]
   \end{verbatim}
 とすると、接続が終了する。  とすると、接続が終了する。
   
 \appendix  \appendix
Line 177  typedef unsigned long int mp_limb_t;  
Line 222  typedef unsigned long int mp_limb_t;  
 \begin{thebibliography}{99}  \begin{thebibliography}{99}
 \bibitem{Openxxx-1998}  \bibitem{Openxxx-1998}
 野呂正行, 高山信毅.  野呂正行, 高山信毅.
 {Open xxx の設計と実装, xxx = asir,kan}, 1998/10/11  {Open XM の設計と実装 --- Open message eXchange protocol for Mathematics},
   1999/11/22
 \bibitem{Ohara-Takayama-Noro-1999}  \bibitem{Ohara-Takayama-Noro-1999}
 小原功任, 高山信毅, 野呂正行.  小原功任, 高山信毅, 野呂正行.
 {Open asir 入門}.  {Open asir 入門}, 1999, 数式処理, Vol 7, No 2, 2--17. (ISBN4-87243-086-7, SEG 出版, Tokyo).
 \bibitem{Wolfram-1992}  \bibitem{Wolfram-1992}
 ウルフラム.  ウルフラム.
 {Mathematica (日本語版)},  {Mathematica (日本語版)},

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>