是否有命令从所有输出清除工作表? (不使用GUI)

时间:2018-08-20 02:12:27

标签: maple

我使用工作表(不是文档模式)。 我知道可以做Edit>Remove Output>From Worksheet来“从工作表中的所有执行组中删除Maple输出”。

但是我找不到执行此操作的命令。我需要这样做,因为当我像这样运行循环时

for i from 1 to n do
    some_function();
od

上面说的功能会打印到屏幕上(即当前打开的工作表)大量信息,然后工作表变慢,我真的也不想看到以任何方式累积的所有调用的日志记录。我只需要一次查看一次迭代中的打印。

(Maple在工作表中也会积累大量输出,这还有其他问题,但这是另一个话题。)

我想做这样的事情

for i from 1 to n do
    some_function();
    delete_all_output_in_current_worksheet();
od;

因此,some_function正在运行时,仅显示一个呼叫的输出。

在Matlab中,可以使用clc轻松地完成此操作,该命令可以清除Matlab中的命令窗口。

枫树上是否有类似上面的内容?

Windows上的Maple 2018.1。

1 个答案:

答案 0 :(得分:1)

没有编程的方法可以清除当前工作表的所有输出。

但是您可以将运行结果从some_function()(每次遍历循环)推送到嵌入式组件,例如。 TextBox,MathContainer等。

您甚至不必从面板中手动插入此类组件。相反,您可以使用DocumentTools:-Tabulate命令以编程方式在当前执行组之后插入一个列表化的组件集合。

例如,作为工作表中的一维代码,您可以将这些代码块放在三个独立的执行组中。

restart;

some_function:=proc(i)
    int( sin(x)^i, x);
end proc:

Leafcutoff := 150:

# Put all this in the same Execution Group
for i from 1 to 111 by 10 do

  res[i] := some_function(i);

  K := MmaTranslator:-Mma:-LeafCount(res[i]);
  if K <= Leafcutoff then
    L := res[i];
  else
    L := sprintf("LeafCount > %a",Leafcutoff);
  end if;
  DocumentTools:-Tabulate(
      [["i","LeafCount","result"],
       [sprintf("%a",i), K, L]],
      ':-weights'=[10,10,40],
      ':-fillcolor'=((T,i,jj)->`if`(i=1,"grey",
                                    "white")),
      ':-widthmode'=':-pixels',
      ':-width'=600);
  Threads:-Sleep(1.5); # delay at least 1.5 sec

end do:
DocumentTools:-Tabulate([[]]):

为了演示它的工作原理,我设置了1.5秒的延时。您可以调整或删除它。

循环完成后,对Tabulate的最后一次调用只是将其清空。

Tabulate插入的GUI表实际上出现在执行组之后的区域中。每个执行组仅出现一个这样的区域。基本上,每次对Tabulate的调用都会覆盖该区域。

如果将end do:更改为end do;,则所有常规输出也将显示,就像循环一样。