> traperror(3/4);
> lasterror;
> traperror(5/0);
Error, numeric exeption: division by zero
> lasterror;
Этот пример показывает, как может быть проведено отслеживание ошибок в ходе вычислений. Вообще говоря, пользователь системой Maple редко привлекает описанные средства, поскольку проще отладить вычислительный алгоритм прежде, чем на его основе будет составлена процедура. При правильном построении процедур ошибочные ситуации заведомо предусматриваются и должным образом обрабатываются.
10.4.2. Преобразование программных кодов
В пакете расширения CodeGenetarion определены функции преобразования Maple-кодов в коды других языков программирования:
> with(CodeGeneration);
Warning, the protected name Matlab has been redefined and unprotected
Например, преобразовать Maple-коды процедуры mode в коды языка MATLAB можно следующим образом:
> Matlab(mode);
Warning, the function names {Im, Re} are not recognized in the target
language
function modcreturn = modc(z)
modcreturn = (sqrt(Re(z) ^ 2 + Im(z) ^ 2));
Из этих примеров очевидно, что пользователь системой Maple, интересующийся программированием в ней, имеет возможности легко ознакомиться с листингами процедур написанных на языке программирования системы Maple, да и на ряде других языков программирования. Более подробное рассмотрение применения программных кодов на других языках программирования в задачи данной книги не входит, хотя оно вполне возможно и система Maple располагает средствами для этого.
10.4.3. Работа с отладчиком программ
В большинстве случаев составители программ (процедур) редко прибегают к пошаговой их отладке. Средства общей диагностики уже в Maple развиты настолько хорошо, что позволяют выявлять грубые ошибки в процедурах при их выполнении. Иногда, правда, для этого приходится неоднократно «прогонять» процедуру, пока она не начнет работать как задумано. Тем не менее, для отладки процедур служит специальный интерактивный отладчик (debugger). Опишем, как его запустить и как с ним работать.
Допустим, мы составили некоторую процедуру demo, вычисляющую сумму квадратов чисел (1^2+2^2+...+n^2):
> demo:=proc(n::integer) local y,i:
> у:=3:
> for i to n do y:=y+i^2 od
> end;
> demo(3);
Чтобы включить отладчик в работу, надо исполнить команду stopat:
> stopat(demo);
> demo(3); demo:
1* y := 0;
DBG>
Признаком, указывающим на работу отладчика, является изменение приглашения к вводу со знака > на DBG> (как нетрудно догадаться, DBG означает
DBG> next
0
demo:
2 for i to n do
...
end do
DBG> step
0
demo:
3 y := y+i^2
DBG> step
1
demo:
3 y := y+i^2
DB3> step
5
demo:
3 y := y+i^2
DBG> step
В последнем случае процедура по шагам дошла до конца вычислений; на этом работа отладчика завершается сама собой.
Можно также вывести листинг процедуры с помощью команды showstat:
> showstat(demo);
demo := proc(n::integer)
local y, i;
1* y := 0;
2 for i to n do
3 y := y+i^2
end do
end proc
Обратите внимание, что в этом листинге строки вычисляемых элементов пронумерованы. Это сделано для облегчения разбора работы процедуры.