補助的なWolframシステムプロセスを呼び出す
補助的なWolframシステムプロセスを呼び出す
| LinkLaunch["prog"] | 外部プログラムを開始させ,そのプログラムとの接続を開く |
link = LinkLaunch["math -mathlink"]LinkRead[link]LinkWrite[link, EnterTextPacket["10!"]]LinkRead[link]LinkRead[link]Wolfram Symbolic Transfer Protocol (WSTP)パケットは,Wolframシステムセッションにかかわるさまざまなオブジェクトを系統立てて管理するために使用されている.WSTPパケットは簡単に言えばパケットの役目や意味を示す一定の頭部を持った式である.
| EnterTextPacket["input"] | 入力行に対応するテキスト |
| ReturnTextPacket["output"] | 出力行に対応して返されるテキスト |
| InputNamePacket["name"] | 入力行の名前として返されるテキスト |
| OutputNamePacket["name"] | 出力行の名前として返されるテキスト |
LinkRead[link]入力にPrintコマンドを2つ与える:
LinkWrite[link, EnterTextPacket["Print[a]; Print[b];"]]1番目のPrintが返したテキスト:
LinkRead[link]2番目のPrintが返したテキスト:
LinkRead[link]出力行は生成されず,次のパケットはInputNamePacketとなる:
LinkRead[link]| 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] | 出力行に相当する式 |
LinkWrite[link, Unevaluated[EnterExpressionPacket[Factor[x ^ 6 - 1]]]]Table[LinkRead[link], {3}]InputNamePacketとOutputNamePacketは補助的Wolframシステムセッションの現在の状態を知りたいときに利用することができる.補助的Wolframシステムセッションを"math -mathlink -batchoutput"で起動すれば,それらのパケットの生成を抑制することができる.
InputNamePacketパケットとOutputNamePacketパケットの明示的な生成を抑制していても,Wolframシステムは,EnterTextPacketあるいはEnterExpressionPacketの入力を,あたかも入力行があるかのように処理する.つまり,Wolframシステムは$Preと$Postを呼んでIn[$Line]とOut[$Line]の値を代入する.
| EvaluatePacket[expr] | 評価のために送信される式 |
| ReturnPacket[expr] | 評価によって返信される式 |
LinkWrite[link, Unevaluated[EvaluatePacket[10!]]]結果は純粋なReturnPacketである:
LinkRead[link]LinkWrite[link, Unevaluated[EvaluatePacket[Print[x]]]]LinkRead[link]その後,Printの結果が返ってくる:
LinkRead[link]ほとんどの場合,EvaluatePacketを送信することによって,Wolframシステムは計算を実行し,ReturnPacketで終るさまざまなパケットを返してくると思っていいだろう.しかし,実行すべき計算がInputのような関数を含んでいる場合,Wolframシステムは計算を続ける前にさらに入力を要求してくる.
Input関数の評価を含むパケットを送信する:
LinkWrite[link, Unevaluated[EvaluatePacket[2 + Input["data ="]]]]返ってくるパケットはInputPacketであり,入力が必要なことを示している:
LinkRead[link]LinkReadyQ[link]LinkWrite[link, EnterTextPacket["x + y"]]LinkRead[link]| LinkInterrupt[link] | WSTP適合プログラムに割込み信号を送る |
LinkWrite[link, EnterTextPacket["FactorInteger[2^777-1]"]]LinkReadyQ[link]LinkInterrupt[link]LinkRead[link]LinkClose[link]