我使用工作表(不是文档模式)。
我知道可以做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。
答案 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;
,则所有常规输出也将显示,就像循环一样。