|
2.13.8 補足:Mathematicaフロントエンドとの通信
Mathematicaカーネルは MathLinkを利用して Mathematicaカーネルと通信している. Mathematicaカーネルをフロントエンドから開始させる場合,カーネルは MathLinkを介してフロントエンドから制御されることになる.

カーネルのフロントエンドとのリンク
大域変数の $ParentLinkはカーネルが入出力を行う MathLinkコネクションを示している.
$ParentLinkを Mathematicaセッション中に切り替えてカーネルが接続しているフロントエンドを切り替えると便利なこともある.
セッション A
ポート8000番にリンクを生成する.
In[1]:= link = LinkCreate["8000"]
Out[1]=LinkObject[8000@frog.wolfram.com, 4, 4]
セッション B
セッションAで生成したリンクに接続 する.
In[2]:= LinkConnect["8000"]
Out[1]=LinkObject[8000@frog.wolfram.com, 4, 4]
セッションBにセッションAをフロントエンドとして使うよう指示する.
In[3]:= $ParentLink = %
セッション A
セッションAはセッションBのフロントエンドとして働き,セッションBからのすべての出力を受け取る.
In[4]:= Table[LinkRead[link], {4}]
Out[2]={ResumePacket[LinkObject[ParentLink, 1, 1]], OutputNamePacket[Out[2]= ], ReturnTextPacket[ LinkObject[8000@frog.wolfram.com, 4, 4]], InputNamePacket[In[3]:= ]}
セッションBを解放する.
In[5]:= LinkWrite[link, EnterTextPacket["$ParentLink=."]]
Mathematicaカーネルとよく似て,Mathematicaの標準ノートブックフロントエンドは MathLinkパケットの一部を処理する.
カーネルからフロントエンドを制御するには通常NotebookWriteや FrontEndExecuteを使うことが最善である. しかし, LinkWriteでフロントエンドに直接パケットを送った方が便利な場合もある.
|