При работе с системой Maple 7 надо
строго придерживаться правил корректного ввода выражений и иных объектов Maple-языка,
называемых синтаксисом языка. Однако, как гласит русская пословица, не ошибается
только тот, кто ничего не делает. Даже у опытного пользователя возможны ошибки
в ходе ввода выражений и задания алгоритмов вычислений.
Алгоритмические, но синтаксически
корректные ошибки часто могут не распознаваться системой. Например, если в выражении
a*sin(x) вы вместо аргумента х взяли аргумент b,
то есть записали a*sin(b), то такую ошибку Maple 7 распознать
не может, ибо синтаксически как a*sin(x), так и
a*sin(b) абсолютно корректны. Если вы перепутаете синус с косинусом
и запишете a*cos(x), то такая ошибка также не будет распознана.
ПРИМЕЧАНИЕ
Ошибки в записи выражений, описывающих те или иные алгоритмы вычислений, не нарушающие синтаксическую корректность, системой Maple 7 не распознаются. Контроль за такими ошибками целиком лежит на пользователе.
Приведем еще один характерный пример
ошибки, которую Maple 7 не может распознать. Вводя выражение
X/Y*Z, мы можем предположить, что это означает X/(Y*Z).
Однако в Maple 7 приоритет операций деления и умножения одинаков. Поэтому Maple
7 вначале делит X на Y, а затем
полученный результат умножает на Z:
Ошибки такого рода называют семантическими.
Если бы мы не проверили вывод с помощью оператора вычисления предыдущего выражения
(%), то эта ошибка осталась бы нераспознанной. Выявление
и устранение семантических ошибок выполняется на этапе отладки вычислений и
программ.
ПРИМЕЧАНИЕ
Используйте блокировку вычислений с помощью знака двоеточия только в том случае, когда вы абсолютно уверены в правильности записи выражения. Иначе вы можете не заметить вкравшейся в вычисления серьезной ошибки.
В нашем примере мы получили бы верный
результат, заключив выражение Y*X в круглые скобки.
Как обычно, они предназначены для задания явного приоритета выполнения операций
— в нашем случае вначале будет вычислено выражение в скобках (Y*Z),
а затем уже X будет поделено на это выражение:
Но вернемся к ситуации с синтаксическими
ошибками, которые система Maple 7 распознает с помощью встроенного в нее синтаксического
анализатора. Например, если вы задали неправильное имя функции, то это будет
опознано синтаксическим анализатором и вычисления не будут выполняться. Maple
7 просто повторит выражение в строке вывода:
В этом примере вместо
имени функции sin введено ошибочное имя
son. Maple воспринимает его как некую введенную пользователем функциональную
зависимость и потому просто повторяет запись и не выводит сообщение об ошибке.
А вот другая ситуация — имя функции sin введено верно,
но вместо десятичной точки при задании вещественного числа 1.0 использована
запятая:
В данном случае Maple 7 «знает»,
что работа идет с его встроенной функцией синуса, которая должна иметь единственный
аргумент. Задание (1,0) означает, что растяпа-пользователь ввел вместо вещественного
числа два целочисленных числа, разделенных запятой. Этого синтаксический анализатор
Maple 7 стерпеть уже не смог, и он отреагировал выдачей сообщения об ошибке
(на экране дисплея оно имеет малиновый цвет). Исправьте ошибку, и синус единицы
будет благополучно вычислен:
А вот еще одна типичная ситуация
— в последовательности выражений опущен знак-разделитель (двоеточие или точка
с запятой):
Тут Maple 7 не только реагирует
на ошибку, но и пытается подсказать, что именно пропущено. Более того, маркер
ввода в виде мигающей вертикальной черточки будет помещен на место ошибки и
вы сможете тут же устранить ошибку. Правда, подсказки не всегда точны — в нашем
случае явно пропущен разделитель в виде двоеточия, a Maple 7 сообщает о пропуске
точки с запятой. Впрочем, откуда системе знать, хотим мы вывести результат операции
Y:=4 сразу (для этого нужен разделитель в виде точки
с запятой) или откладываем на потом (с помощью символа двоеточия).
Вот еще один пример характерной
ошибки — три знака * подряд:
Здесь Maple 7 подсказывает, что
один оператор * надо убрать — два знака
* подряд означают вполне законный вариант оператора — возведение в степень.
При этом маркер ввода вновь указывает место ошибки. Проанализируйте следующие
простые примеры:
В этом примере Maple 7 вначале вычисляет
функцию синуса, затем производит возведение в степень и лишь потом операцию
умножения. Впрочем, такой приоритет операций принят практически во всех системах
компьютерной математики и в языках программирования.
Некоторые пользователи версии системы
Maple V R5 наблюдали, что русская буква «я» в конце программного
комментария (он вводится после символа #) вела к зависанию программы, что требовало
ее перезагрузки. В Maple 7 этот недостаток устранен:
> #Буква "я" в конце комментария уже не вызывает зависания
>
Позже, при описании программирования в Maple 7, мы опишем более развитые средства контроля над допускаемыми пользователем ошибками. Пока же ограничимся приведенными 'Выше сведениями, полезными уже в начале диалога с системой.