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

问题描述 投票:2回答:1

我使用工作表(不是文档模式)。我知道可以做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中的命令窗口。

在Maple中有类似的东西吗?

Windows上的Maple 2018.1。

maple
1个回答
1
投票

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

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

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

例如,作为工作表中的1D代码,您可以在三个单独的执行组中包含这些代码块。

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;,那么所有常规输出也会像往常一样显示出来。

© www.soinside.com 2019 - 2024. All rights reserved.