Wolfram mathematica 如何隐藏$Aborted消息?

Wolfram mathematica 如何隐藏$Aborted消息?,wolfram-mathematica,Wolfram Mathematica,我知道我正在中止评估,当侧面的黑条消失时可以看到它。因此,不需要这个信息。如何关闭它?如果您没有将$Post用于其他用途,或者如果您可以组合函数,则可以使用: $Post = # /. $Aborted -> Null &; 请注意,由于程序可能在其控制流中使用$Aborted,您可能会破坏某些内容 更有力地说,解决问题Alexey证明: $Post = Function[Null, Unevaluated@# /. $Aborted -> Null, HoldAllCo

我知道我正在中止评估,当侧面的黑条消失时可以看到它。因此,不需要这个信息。如何关闭它?

如果您没有将
$Post
用于其他用途,或者如果您可以组合函数,则可以使用:

$Post = # /. $Aborted -> Null &;
请注意,由于程序可能在其控制流中使用
$Aborted
,您可能会破坏某些内容


更有力地说,解决问题Alexey证明:

$Post = Function[Null, Unevaluated@# /. $Aborted -> Null, HoldAllComplete];

以下似乎有效:

SetAttributes[katch, HoldAll];
katch[x_] := CheckAbort[x, Return@Null] 
$Pre = katch;
测试后,请记住将$Pre返回到其以前的值:

$Pre =.
不过,可能会干扰一些内部中止捕获

编辑

西蒙的版本:

$Pre = Function[{x}, CheckAbort[x,Return@Null], {HoldAll}]

以下是Simon建议的基于
$Pre
的方法和Mr.Wizard建议的基于
$Post
的方法的概括

在这两种情况下,应将
HoldAllComplete
属性设置为纯函数,并通过
Unevaluated
x
(输入表达式)包装在纯函数中,以便它们能正确处理具有
Head
s
Sequence
unevaluate
的输入

比较基于
$Pre
的解决方案的两个版本:

f1 = Function[{x}, CheckAbort[x, Null], {HoldAll}]
f2 = Function[{x}, CheckAbort[Unevaluated@x, Null], {HoldAllComplete}]

In[3]:= f1@Sequence[1,2]
f1@Abort[]
f1@Evaluate[Abort[]]
f1@Unevaluated[1+1]
Out[3]= 1
Out[5]= $Aborted
Out[6]= 2

In[7]:= f2@Sequence[1,2]
f2@Evaluate[Abort[]]
f2@Unevaluated[1+1]
Out[7]= Sequence[1,2]
Out[9]= Unevaluated[1+1]
可以看出,第一个版本很容易被
Evaluate[Abort[]]
破坏,并且在输入表达式具有
s
序列
未评估
时工作不正确。对于没有
HoldAllComplete
属性的任何一个参数函数,这通常是正确的。由于
$Pre
$Post
和friends都是一个参数函数,因此必须始终为它们设置
HoldAllComplete
属性

使用
Null
作为
CheckAbort
的第二个参数也没有问题(不需要
Return@Null
)。在我的机器上(Windows 2000下的Mathematica 7.0.1)
$Abort
f2
的情况下永远不会返回

基于
$Post
的解决方案也是如此。它可以概括如下:

$Post = Function[x, If[Unevaluated@x =!= $Aborted, Unevaluated@x], 
  HoldAllComplete]
测试表达式:

In[14]:= Unevaluated[1+2]
Sequence[1,2]
$Aborted
Abort[]
Out[14]= Unevaluated[1+2]
Out[15]= Sequence[1,2]

从技术上讲,这不是一条消息,而是一个返回的表达式。。有没有办法不显示它?当然,请看我的答案。;-)谢谢此会话是否依赖于所有会话?环境变量不是持久的。我在用户目录中使用Kernel/init.m来设置像
$historyllength
之类的东西。。。
$historyllength
是否表示撤消的数量?我在想类似的事情,但在另一端:使用$Pre将所有内容包装在
CheckAbort[#,Null]&
中,但它不起作用…:(@Mr.Wizard:谢谢。虽然撤销很糟糕。+1:是的,这就是我试图做的。它可以做成一行
$Pre=Function[{x},CheckAbort[x,Null],{HoldAll}]
+1 Alexey。我现在也更新了我的答案。您可能希望以主要格式重写您的答案,也就是说,如果您的答案被接受,那么您的答案不会从属于其他答案。