调用辅助的 Wolfram 系统过程

LinkLaunch["prog"]
开始一个外部程序,并打开对它的连接
用 WSTP 连接到一个辅助程序上.
在这里使用的计算机系统上,开始一个辅助 Wolfram 系统过程:
这个程序包,表示来自于辅助 Wolfram 系统过程的第一个输入提示:
编写一个程序包,它表示要进入辅助过程的文本:
辅助过程的输出提示:
这是一个实际的计算结果:
对一个 Wolfram 系统会话中所涉及的各种不同对象进行组织管理的基本方式是使用 Wolfram Symbolic Transfer Protocol (WSTP). 一个 WSTP 程序包就是一个表达式,它有一个确定的头表明其作用或意义.
EnterTextPacket["input"]
对应于输入行的输入文本
ReturnTextPacket["output"]
对应于输出行的返回文本
InputNamePacket["name"]
输入行名称的返回文本
OutputNamePacket["name"]
输出行名称的返回文本
Wolfram 系统会话中使用的基本包.
LinkRead 返回到 InputNamePacket 这一事实表明辅助 Wolfram 系统现在已准备好等待新输入:
这里输入两个 Print 指令作为输入:
这是来自于第一个 Print 的文本:
这是来自于第二个 Print 的文本:
没有产生输出行,所以新包是 InputNamePacket
TextPacket["string"]
Print 等得到的文本
MessagePacket[symb,"tag"]
一个信息名称
DisplayPacket["string"]
PostScript 图形的一部分
DisplayEndPacket["string"]
PostScript 图形的结束
Wolfram 系统会话中产生的额外包.
EnterTextPacket["input"] 对 Wolfram 语言进行输入后,那么 Wolfram 语言就会自动产生一个输出字符串,并且用 ReturnTextPacket["output"] 呼应. 但用 EnterExpressionPacket[expr] 输入时, Wolfram 语言就用 ReturnExpressionPacket[expr] 呼应,并且不把输出变为一个字符串.
EnterExpressionPacket[expr]
对应于一个输入行的输入表达式
ReturnExpressionPacket[expr]
对应于一个输出行的返回表达式
表示使用表达式的输入输出行的包.
对辅助 Wolfram 系统会话输入一个表达式,并不计算它:
这里是从辅助 Wolfram 系统进程中返回的三个包:
InputNamePacketOutputNamePacket 包在判断辅助 Wolfram 系统进程的当前状态是方便的. 通过用"math -mathlink -batchoutput" 等字符串调用这个辅助 Wolfram 系统进程可以抑制这些包的产生.
即使明确地抑制了 InputNamePacketOutputNamePacket 包的产生,Wolfram 系统仍将像输入一个行一样处理用 EnterTextPacket 或者 EnterExpressionPacket 进行的输入. 这意味着 Wolfram 语言将调用 $Pre$Post 等,并对 In[$Line]Out[$Line] 指定值.
EvaluatePacket[expr]
送去纯为计算的表达式
ReturnPacket[expr]
从计算得到的表达式
计算没有明显输入和输出行的表达式.
这里发送一个 EvaluatePacket. Unevaluated 防止发送之前计算:
这结果是一个纯 ReturnPacket
这里发送 EvaluatePacket,并要求计算 Print[x]
返回的第一个包是 TextPacket,它表示由 Print 产生的文本:
随后返回的是 Print 的实际结果:
在大部分情况中,可以认为向 Wolfram 系统发送一个 EvaluatePacket 会导致 Wolfram 系统进行一个运算,并返回 ReturnPacket 结束的各种包. 然而,当运算涉及 Input 等函数时,Wolfram 系统在进行该计算之前必须得到其它输入.
这里发送一个包,它的计算涉及到一个 Input 函数:
返回的是一个 InputPacket,它表明需要进一步输入:
这一处的链接没有任何更多要读的内容:
这里进行更多的输入:
现在可以计算 Input 函数,产生 ReturnPacket
LinkInterrupt[link]
向一个与 WSTP 兼容的程序发送一个中断
中断一个与 WSTP 兼容的程序.
这里将一个很费时的计算送往辅助程序:
该计算仍在进行之中:
这里发送一个中断:
辅助程序现在停止运行,返回一个中断菜单:
这里关闭链接: