此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

2.12.7 调用辅助的 Mathematica 过程

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

在这里使用的计算机系统上开始一个辅助 Mathematica 过程

这里是一个包,它表示来自于辅助 Mathematica 过程的第一个输入提示

这里写一个包,它表示要进入辅助 Mathematica 过程的文本

这里是一个包,它表示来自于辅助 Mathematica 过程的输出提示

这是一个实际的计算结果

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

Mathematica 进程中使用的基本包

LinkRead 返回到 InputNamePacket 这一事实表

明辅助 Mathematica 现在已准备好等待新输入这里输入两个 Print 指令作为输入

这是来自于第一个 Print 的文本

这是来自于第二个 Print 的文本

没有产生输出行,所以新包是 InputNamePacket

Mathematica 进程中产生的额外包

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

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

对辅助 Mathematica 进程输入一个表达式,并不计算它

这里是从辅助 Mathematica 进程中返回的三个包

InputNamePacketOutputNamePacket 包在判断辅助 Mathematica 进程的当前状态时是方便的. 通过用 "math -mathlink -batchoutput" 等字符串调用这个辅助 Mathematica 进程可以抑制这些包的产生.
即使明确地抑制了 InputNamePacket OutputNamePacket 包 的产生,Mathematica 仍将像输入一个行一样处理用 EnterTextPacketEnterExpressionPacket 进行的输入. 这意味着 Mathematica 将调用 $Pre$Post 等,并对 In[$Line]Out[$Line] 指定值.

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

这里发送一个 EvaluatePacket, Unevaluated 防止发送之前计算

这结果是一个纯 ReturnPacket

这里发送 EvaluatePacket 并要求计算 Print[x]

返回的第一个包是 TextPacket,它表示由 Print 产生的文本

随后返回的是 Print 的实际结果

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

这里发送一个包,它的计算涉及到一个 Input 函数

返回的是一个 InputPacket,它表明需要进一步的输入

这一处的链接没有任何更多要读的内容

这里进行更多的输入

现在可以计算 Input 函数,产生 ReturnPacket

中断一个与 MathLink 相容的程序

这里将一个很费时的计算送往辅助程序

该计算仍在进行之中

这里发送一个中断

辅助程序现在停止运行,返回一个中断菜单