version 1.1, 1999/10/29 08:06:42 |
version 1.3, 1999/11/23 03:08:26 |
|
|
%#!platex |
%#!platex |
%% $OpenXM$ |
%% $OpenXM: OpenXM/src/ox_math/documents/ox_math.tex,v 1.2 1999/11/02 06:12:00 ohara Exp $ |
|
|
\documentclass{jarticle} |
\documentclass{jarticle} |
\title{Mathematica の Open XM 化について |
\title{Mathematica の Open XM 化について |
Line 32 MathLink ライブラリを利用して通信する。Open Mathmatica |
|
Line 32 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 131 SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMa |
|
Line 131 SM\_executeStringByLocalParser, SM\_mathcap, SM\_setMa |
|
で何もしない)である。 |
で何もしない)である。 |
|
|
\section{Mathematica を OX のクライアントに} |
\section{Mathematica を OX のクライアントに} |
|
OpenXM クライアントは Mathematica の外部プログラム(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], |
|
OxExecute[s\_String], OxParse[s\_String], OxReceive[], |
|
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} |
|
のように 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] := OxReceive[] |
|
\end{verbatim} |
|
とするだけでよい。返ってくるオブジェクトは CMO に対応するものである。 |
|
\begin{verbatim} |
|
In[6] := OxPopCMO[] |
|
\end{verbatim} |
|
を用いる場合にはもちろん {\tt OxReceive[]} を呼び出す必要はない。 |
|
|
|
計算を実行するには {\tt OxExecute[]} |
|
(SM\_executeStringByLocalParser) か、適切な OX メッセージを送信すること。 |
|
|
|
計算が終わったら、 |
|
\begin{verbatim} |
|
In[7] := OxClose[] |
\end{verbatim} |
\end{verbatim} |
とすると、接続が終了する。 |
とすると、接続が終了する。 |
|
|