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