ドキュメンテーションpage
には、次のように記載されGeneral::stop
ています。
このメッセージは、示されたメッセージが1 回の評価で3 回生成された後に生成されます。
長い計算でメッセージが冗長または繰り返しになるのを防ぐために、メッセージは抑制されます。
私の問題は、作業中MathLink
にすべてのポイントを単一の評価として渡すため、General::stop
表示されないことです。
たとえば、次のように定義するとします。
link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
f[z_?NumericQ] := (Print@LinkRead[link];
LinkWrite[link,
Unevaluated[
EnterExpressionPacket[NIntegrate[Sin[1/x], {x, .001, z}]]]];
While[Head[packet = LinkRead[link]] =!= OutputNamePacket,
Print[packet]]; First@LinkRead[link]);
Plot[f[z], {z, 1, 10}, PlotPoints -> 6, MaxRecursion -> 0]
Message
の評価と同じ数のパケットを取得しますf[z]
。もちろんGeneral::stop
、同じメッセージを 3 回生成した後、スレーブ カーネルでメッセージの生成を停止させたいと考えています。これを達成する方法はありますか?
のドキュメントページで、$MessageList
それを読みました
標準のMathematicaメインループでは、特定の入力行の処理が完了すると $MessageList が {} にリセットされます。
そして、tutorial/Messages
私たちが読んだページで:
実行するすべての計算で、 Mathematicaは生成されるすべてのメッセージのリスト $MessageList を維持します。標準 のMathematicaセッションでは、このリストは出力の各行が生成されるたびにクリアされます。
General::stop
これが表示されない理由でしょうか?それが本当なら、メイン ループのこの側面を制御する方法はありますか? このような非標準のMathematicaセッションを作成する方法はありますか?
編集:
私の推測は正しかったようです。$MessageList
すべてのメッセージの後にクリアすると、General::stop
表示されなくなります。
Unprotect[$MessageList]
Do[$MessageList = {}; 1/0, {10}]
出力を生成した後に自動クリアを無効にする方法は$MessageList
?