Есть ли команда для очистки рабочего листа от всех выходных данных? (без использования графического интерфейса)

Я использую лист (не режим документа). Я знаю, что можно сделать 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?

Клен 2018.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([[]]):

I put in a time-delay of 1.5 seconds just to illustrate it working. You can adjust that, or remove it.

Последний звонок Tabulate is only there to blank it out, when the loop is finished.

The GUI Table inserted by Tabulate actually appears in a region right after the Execution Group. Only one such region appears, per Execution Group. Basically, each call to Tabulate overwrites that region.

Если вы изменили end do: в end do; then all the regular output would also be shown, as usual for a loop.

Другие вопросы по тегам