Шаг 33.
Сообщения об ошибках в системе muLISP85
На этом шаге мы перечислим сообщения об ошибках, выводимые в системе muLISP85.
Когда muLISP обнаруживает ошибочное состояние, вызывается функция BREAK. BREAK выдает
соответствующее сообщение об ошибке, приостанавливает выполнение программы и обеспечивает пользователя опциями
продолжения работы на выбор:
Continue, Break, Abort, Top-level, Restart, System?
Затем система ждет, пока пользователь выберет одну из опций путем указания ее имени (С, В, А, Т, R или S
соответственно). Отметим, что опции перечислены в порядке усиления их действия.
- Continue (продолжить) - возвращает управление программе, которая вызвала прерывание (останов).
Если причиной прерывания была команда прерывания, посланная с клавиатуры, то выполнение продолжается, как если
бы прерывания (останова) не произошло. Если прерывание произошло в результате задержки ошибки, величина, переданная
при прерывании регулировщиком ошибок, возвращается как значение ошибочной функции;
- Break (останов) - временно приостанавливает выполнение программы и выходит на следующий нижний
уровень цикла "read-eval-print" ("чтение-вычисление-печать"). Это позволяет пользователю проверить или (и) изменить
текущую среду muLISP перед продолжением выполнения программы. Для выхода из останова и возобновления работы
программы наберите (RETURN) вслед за знаком доллара;
- Abort (прерывание) - прерывает выполнение программы, присваивает формальным параметрам, размещенным
в стеке переменных, первоначальные значения и возвращает управление на текущий уровень цикла "read-eval-print".
Определения функций, значения свойств и глобальных переменных остаются неизменными;
- Top-level (верхний уровень) - прерывает выполнение программы, присваивает первоначальные значения формальным
параметрам, которые размещаются в стеке переменных, высвечивает на консоль текущие входные и выходные данные и
возвращает управление верхнему уровню цикла "read-eval-print". Определения функций, значения свойств и глобальных переменных
остаются неизменными;
- Restart (повторный старт) - закрывает все открытые файлы, отказывается от текущей среды muLISP и
инициирует новую систему muLISP. Все связи между переменными, функции и значения свойств в текущей среде muLISP
разрушаются;
- System (система) - закрывает все открытые файлы, завершает выполнение muLISP и возвращает управление
операционной системе.
Ниже в алфавитном порядке приведены сообщения об ошибках в системе muLISP85:
- DISK FULL (диск заполнен) - означает, что памяти для размещения данных, записываемых на диск, не хватает.
Выполнение программы прекращается, и возникает прерывание по ошибке. Т.к. файл остается открытым, имеется возможность удалить
и другие файлы на всей дискете (с помощью функции EXETUTE) и продолжить запись в файл;
- END-OF-FILE (конец файла) - означает, что была сделана попытка считать данные за пределами конца входного
файла или из его пустых мест (см.описание функции WRITEPTR). Следом за сообщением "end-of-file" высвечивается
список типа: "drive:name.type";
- FILE NOT FOUND (файл не найден) - означает, что исходный и (или) SYS-файл, указанный в командах ОС,
инициирующих muLISP, не найден, или SYS-файл "неправильной" версии. SYS-файл может быть загружен только
под управлением той версии muLISP, которая используется для сохранения файла.
Исходные и SYS-файлы, кроме того, могут быть загружены в muLISP с использованием команд RDS и LOAD
соответственно. Когда одна из этих команд завершается, а файл не найден, вместо сообщения "FILE NOT FOUND" команда
возвращает признак NIL;
- INSUFFICIENT ARGUMENTS (недостаточное количество аргументов) - означает, что функция, требующая, по крайней
мере, одного аргумента, вызывается без аргументов. Функциями, которые могут вызвать этот тип ошибки, являются: MAX, MIN, -, /, ADD1, SUB1, LCM,
ABS, SIGNUM, NUMERATOR, DENOMINATOR, FLOOR, CEILING, TRUNCATE, ROUND, MJD, REM, DIVIDE, LOGNOT, BITLENGTH
и SHIFT;
- INSUFFICIENT MEMORY, ABORTING (недостаточное количество памяти, прерывание) - означает, что имеет место
нехватка памяти для загрузки и функционирования среды muLISP. Работа muLISP приостанавливается, и управление возвращается
к управляющей ОС. Отметим, что среда muLISP, сохраняемая в SYS-файле, может быть загружена в ЭВМ, имеющую
меньший обьем памяти, чем ЭВМ, на которой эта среда была создана. Ошибка по нехватке памяти возникает только тогда, когда ЭВМ,
на которой SYS-файл был загружен, не обладает достаточным обьемом памяти для размещения среды muLISP. Единственный путь
загрузки SYS-файлов - это получение большего обьема памяти для ЭВМ.
- MEMORY FULL (память исчерпана) - означает, что памяти для продолжения выполнения программ muLISP
не хватает. Выполнение программ приостанавливается, и возникает прерывание по ошибке. Действительно, система управления памятью
обеспечивает достаточным количеством памяти каждую область данных для полного удовлетворения потребностей программ muLISP.
Если требования на обьем памяти для размещения обьектов данных превышают все доступные ресурсы, возникает эта ошибка. Вместе
с сообщением об ошибке высвечивается статистика в следующей форме:
GC: nnnn aaaa/aaaa vvvv/vvvv pppp/pppp ssss/ssss tttt/tttt
Шестнадцатеричные цифры, следующие за "GC:", показывают размер памяти, оставшейся в каждой из основных 4-х областей данных.
Следовательно, может быть определена область данных, связанная с ошибкой;
- NONINTEGER ARGUMENT (нецелый аргумент) - означает, что функция, требующая целых аргументов, вызвана с нецелым
аргументом. Функции, для которых эта ошибка может встретиться, это: LOGAND, LOGIOR, LOGXOR, LOGNOT, SHIFT и BITLENGTH;
- NONINTEGER ARGUMENT (нечисловой аргумент) - означает, что функция, требующая числовых аргументов, вызвана с
нечисловым аргументом. Такая ошибка может возникнуть для следующих функций: =, /=, <, >, <=, >=, MAX, MIN, +, -, *, /, ADD1, SUB1, INCQ, DECQ, GCD, LCM,
ABC, SIGNUM, NUMERATOR, DENOMINATOR, FLOOR, CEILING, TRUNCATE, ROUND, MOD, REM и DIVIDE;
- NONSYMBOLIC ARGUMENT (несимвольный аргумент) - означает, что функция, требующая символьных аргументов, выз-
вана с несимвольным аргументом. К таким функциям относятся: SET, SETQ, PSETQ, POP, PUSH, INCQ и DECQ;
- SYNTAX ERROR (синтаксическая ошибка) - означает, что функция READ встретила либо лишние правые
скобки, либо неточность в точечном изображении, например, (A.) или (AB.CD). Т.к. прерывание по данной ошибке генерируется
макросом правых скобок или запятых, оно может быть модифицировано пользователем-проектировщиком;
- UNDIFINED FUNCTION (неопределенная функция) - означает, что была сделана попытка использования символа, не
имеющего определения функции. Общими действиями при появлении этой ошибки являются: выбор опции BREAK, определение
неопределенного символа и продолжение исходной программы с помощью команды (RETURN (EVAL BREAK));
- ZERO DIVIDE (деление на 0) - означает, что была вызвана функция деления с нулевым делителем. Такими функциями
могут быть: /, FLOOR, CEILING, TRUNCATE, ROUND, MOD, REM и DIVIDE.
На следующем шаге мы начнем изучать рекурсию и ее формы.
Предыдущий шаг
Содержание
Следующий шаг