2.12.7 调用辅助的 Mathematica 过程 用 MathLink 连接到一个辅助程序上 在这里使用的计算机系统上开始一个辅助 Mathematica 过程
Out[1]= |  |
这里是一个包,它表示来自于辅助 Mathematica 过程的第一个输入提示
Out[2]= |  |
这里写一个包,它表示要进入辅助 Mathematica 过程的文本 这里是一个包,它表示来自于辅助 Mathematica 过程的输出提示
Out[4]= |  |
这是一个实际的计算结果
Out[5]= |  |
对一个 Mathematica 进程中所涉及的各种不同对象进行组织管理的基本方式 是使用 MathLink 包. 一个 MathLink 包就是一个表达式,它有一个确定的头 表明其作用或意义. Mathematica 进程中使用的基本包 LinkRead 返回到 InputNamePacket 这一事实表
Out[6]= |  |
明辅助 Mathematica 现在已准备好等待新输入这里输入两个 Print 指令作为输入 这是来自于第一个 Print 的文本
Out[8]= |  |
这是来自于第二个 Print 的文本
Out[9]= |  |
没有产生输出行,所以新包是 InputNamePacket
Out[10]= |  |
Mathematica 进程中产生的额外包 用 EnterTextPacket["input"] 对 Mathematica 进行输入后,Mathematica 就自动产生一个输出字符串,并且用 ReturnTextPacket["output"] 呼应. 但用 EnterExpressionPacket[expr] 输入时,Mathematica 就用 ReturnExpressionPacket[expr] 呼应,并且不把输出变为一个字符串. 表示使用表达式的输入输出行的包 对辅助 Mathematica 进程输入一个表达式,并不计算它 这里是从辅助 Mathematica 进程中返回的三个包
Out[12]= |  |
InputNamePacket 和 OutputNamePacket 包在判断辅助 Mathematica 进程的当前状态时是方便的. 通过用 "math -mathlink -batchoutput" 等字符串调用这个辅助 Mathematica 进程可以抑制这些包的产生. 即使明确地抑制了 InputNamePacket 和 OutputNamePacket 包 的产生,Mathematica 仍将像输入一个行一样处理用 EnterTextPacket 或EnterExpressionPacket 进行的输入. 这意味着 Mathematica 将调用 $Pre 和 $Post 等,并对 In[$Line] 和 Out[$Line] 指定值. 计算没有明显输入和输出行的表达式 这里发送一个 EvaluatePacket, Unevaluated 防止发送之前计算 这结果是一个纯 ReturnPacket
Out[14]= |  |
这里发送 EvaluatePacket 并要求计算 Print[x] 返回的第一个包是 TextPacket,它表示由 Print 产生的文本
Out[16]= |  |
随后返回的是 Print 的实际结果
Out[17]= |  |
在大部分情况中,可以认为向 Mathematica 发送一个 EvaluatePacket 会导致 Mathematica 进行一个运算,并返回用 ReturnPacket 结束的各种包.而当运算涉及 Input 等函数时 Mathematica 在进行该计算之前必须得到其它输入. 这里发送一个包,它的计算涉及到一个 Input 函数 返回的是一个 InputPacket,它表明需要进一步的输入
Out[19]= |  |
这一处的链接没有任何更多要读的内容
Out[20]= |  |
这里进行更多的输入 现在可以计算 Input 函数,产生 ReturnPacket
Out[22]= |  |
中断一个与 MathLink 相容的程序 这里将一个很费时的计算送往辅助程序 该计算仍在进行之中
Out[24]= |  |
这里发送一个中断 辅助程序现在停止运行,返回一个中断菜单
Out[26]= |  |
|