如何中止对一系列输入的评估?

Ale*_*kov 4 wolfram-mathematica mathematica-frontend

默认情况下,在评估中按Alt+ .或调用Abort[]会导致当前评估输入的中止.但是当在FrontEnd中工作时,我们通常会向内核发送一系列输入.例如,如果我们在一个单独的行中键入以下三个表达式Cell,然后按Shift+ Enter我们得到无限评估:

f := CheckAbort[Pause[.1], Abort[]]
While[True, f]
While[True, f]
While[True, f]
Run Code Online (Sandbox Code Playgroud)

要停止这种无限评估,我们必须按Alt+ .三次.

如何f在上面的例子中定义函数,按下Alt+ . 一次将中止对输入的完整序列的评估而不退出内核

编辑

我认为如果FrontEnd为MathKernel创建一个输入队列,它可能也会取消这个队列.

Mic*_*lat 6

Sasha建议只使用四个单元格是有效的,因为这基本上就是FrontEnd所做的事情,向内核提交了几个不同的评估.如果你坚持使用一个单元格,将它包装在parens(CompoundExpression)中,这会导致这四行被视为一个评估(注意也需要;):

(
   f := CheckAbort[Pause[.1], Abort[]];
   While[True, f];
   While[True, f];
   While[True, f]
)
Run Code Online (Sandbox Code Playgroud)

然后,一次中止将中止整个评估.

  • 这种方法至少有一个缺点:我们必须通过`Print`显式地包装我们希望在输出中看到的每个表达式.然而,通过使用`CellEvaluationFunction`(由WReach [here](http://stackoverflow.com/questions/4198961/what-is-in-your-mathematica-tool-bag/5451304#5451304)揭示)我们可能会这样做自动. (2认同)