调用辅助的 Mathematica 过程

LinkLaunch["prog"]开始一个外部程序,并打开对它的连接

MathLink 连接到一个辅助程序上.

在这里使用的计算机系统上,开始一个辅助 Mathematica 过程.
In[1]:=
Click for copyable input
Out[1]=
这里是一个包,它表示来自于辅助 Mathematica 过程的第一个输入提示.
In[2]:=
Click for copyable input
Out[2]=
这里写一个包,它表示要进入辅助 Mathematica 过程的文本.
In[3]:=
Click for copyable input
辅助 Mathematica 过程的输出提示.
In[4]:=
Click for copyable input
Out[4]=
这是一个实际的计算结果.
In[5]:=
Click for copyable input
Out[5]=

对一个 Mathematica 进程中所涉及的各种不同对象进行组织管理的基本方式是使用 MathLink packets. 一个 MathLink 包就是一个表达式,它有一个确定的头表明其作用或意义.

EnterTextPacket["input"]对应于输入行的输入文本
ReturnTextPacket["output"]对应于输出行的返回文本
InputNamePacket["name"]输入行名称的返回文本
OutputNamePacket["name"]输出行名称的返回文本

Mathematica 进程中使用的基本包.

LinkRead 返回到 InputNamePacket 这一事实表明辅助 Mathematica 现在已准备好等待新输入.
In[6]:=
Click for copyable input
Out[6]=
这里输入两个 Print 指令作为输入.
In[7]:=
Click for copyable input
这是来自于第一个 Print 的文本.
In[8]:=
Click for copyable input
Out[8]=
这是来自于第二个 Print 的文本.
In[9]:=
Click for copyable input
Out[9]=
没有产生输出行,所以新包是 InputNamePacket.
In[10]:=
Click for copyable input
Out[10]=
TextPacket["string"]Print 等得到的文本
MessagePacket[symb,"tag"]一个信息名称
DisplayPacket["string"]PostScript 图形的一部分
DisplayEndPacket["string"]PostScript 图形的结束

Mathematica 进程中产生的额外包.

EnterTextPacket["input"] 对 Mathematica 进行输入后,那么 Mathematica 就会自动产生一个输出字符串,并且用 ReturnTextPacket["output"] 呼应. 但用 EnterExpressionPacket[expr] 输入时,Mathematica 就用 ReturnExpressionPacket[expr] 呼应,并且不把输出变为一个字符串.

EnterExpressionPacket[expr]对应于一个输入行的输入表达式
ReturnExpressionPacket[expr]对应于一个输出行的返回表达式

表示使用表达式的输入输出行的包.

对辅助 Mathematica 进程输入一个表达式,并不计算它.
In[11]:=
Click for copyable input
这里是从辅助 Mathematica 进程中返回的三个包.
In[12]:=
Click for copyable input
Out[12]=

InputNamePacketOutputNamePacket 包在判断辅助 Mathematica 进程的当前状态是方便的. 通过用 等字符串调用这个辅助 Mathematica 进程可以抑制这些包的产生.

即使明确地抑制了 InputNamePacketOutputNamePacket 包的产生,Mathematica 仍将像输入一个行一样处理用 EnterTextPacket 或者 EnterExpressionPacket 进行的输入. 这意味着 Mathematica 将调用 $Pre$Post 等,并对 In[$Line]Out[$Line] 指定值.

EvaluatePacket[expr]送去纯为计算的表达式
ReturnPacket[expr]从计算得到的表达式

计算没有明显输入和输出行的表达式.

这里发送一个 EvaluatePacket. Unevaluated 防止发送之前计算.
In[13]:=
Click for copyable input
这结果是一个纯 ReturnPacket.
In[14]:=
Click for copyable input
Out[14]=
这里发送 EvaluatePacket,并要求计算 Print[x].
In[15]:=
Click for copyable input
返回的第一个包是 TextPacket,它表示由 Print 产生的文本.
In[16]:=
Click for copyable input
Out[16]=
随后返回的是 Print 的实际结果.
In[17]:=
Click for copyable input
Out[17]=

在大部分情况中,可以认为向 Mathematica 发送一个 EvaluatePacket 会导致 Mathematica 进行一个运算,并返回 ReturnPacket 结束的各种包. 然而,当运算涉及 Input 等函数时,Mathematica 在进行该计算之前必须得到其它输入.

这里发送一个包,它的计算涉及到一个 Input 函数.
In[18]:=
Click for copyable input
返回的是一个 InputPacket,它表明需要进一步输入.
In[19]:=
Click for copyable input
Out[19]=
这一处的链接没有任何更多要读的内容.
In[20]:=
Click for copyable input
Out[20]=
这里进行更多的输入.
In[21]:=
Click for copyable input
现在可以计算 Input 函数,产生 ReturnPacket.
In[22]:=
Click for copyable input
Out[22]=
LinkInterrupt[link]向一个与 MathLink 兼容的程序发送一个中断

中断一个与 MathLink 兼容的程序.

这里将一个很费时的计算送往辅助程序.
In[23]:=
Click for copyable input
该计算仍在进行之中.
In[24]:=
Click for copyable input
Out[24]=
这里发送一个中断.
In[25]:=
Click for copyable input
辅助程序现在停止运行,返回一个中断菜单.
In[26]:=
Click for copyable input
Out[26]=
这里关闭链接.
In[27]:=
Click for copyable input
New to Mathematica? Find your learning path »
Have a question? Ask support »