中断与退出

"中断计算" 节中叙述了如何按某些键来中断 Wolfram 语言的计算.

有时候,需要在 Wolfram 语言程序中模拟使用这一方法. 一般说来,执行 Interrupt[] 与按中断键有相同的使用. 如 "中断计算" 节所述,在某些系统中会在屏幕上出现一个选择菜单.

Interrupt[]中断计算
Abort[]退出计算
CheckAbort[expr,failexpr]计算 expr 并给出结果,如果退出就返回 failexpr
AbortProtect[expr]直到计算 expr 完成时一直屏蔽计算结果

中断与退出.

函数 Abort[] 在中断计算时与在中断菜单中选退出项 的效果相同.

可以用 Abort[] 在程序中立即中断,但在几乎所有的情况下,最好使用函数如 ReturnThrow,它们产生的结果容易控制.

Abort 终止了计算,仅第一个 Print 被执行.
In[1]:=
Click for copyable input
Out[1]=

在计算 Wolfram 语言表达式的过程的任何点中断了计算以后,Wolfram 语言将放弃对整个表达式的计算,返回值为$Aborted.

但可以使用 CheckAbort 函数去捕获中断. 如果在 CheckAbort[expr,failexpr]expr 计算过程中中断,函数CheckAbort 的返回值为 failexpr,且中断不再扩大. Dialog 等函数这样使用 CheckAbort 以包含中断的影响.

CheckAbort 捕获中断,显示 ,返回值为 .
In[2]:=
Click for copyable input
Out[2]=
Abort 的效果包含在 CheckAbort 中,所以显示 .

在 Wolfram 语言的复杂程序中,有时需程序中的某一部分不发生中断,可以通过交互或是调用 Abort 实现. 函数AbortProtect 可以使计算一直进行下去,而将计算过程中的中断保存到表达式计算结束.

Abort 一直保存到 AbortProtect 完成.
In[4]:=
Click for copyable input
Out[4]=
CheckAbort 看见中断,但使中断不再继续扩大.

即使在 AbortProtect 之内,CheckAbort 将发现任何中断,并返回到一个合适的 failexpr. 当这个 failexpr 本身不包含 Abort[] 时,中断就会被 CheckAbort吸收.