8.2 Управление ходом выполнения

Ниже собраны команды, управляющие порядком выполнения других команд (условия, циклы, подпрограммы), (пере-)определяют аргументы скрипта и пр. Прочие команды могут быть найдены в главах Ядро MathGL и Обработка данных. Отмечу, что некоторые из команд (например, define, ask, call, for, func) должны быть расположены на отдельной строке.

Команда MGL: chdir 'path'

Переходит в папку path.

Команда MGL: ask $N 'question'

Задает N-ый аргумент скрипта равным ответу пользователя на вопрос question. Обычно команда показывает диалог с вопросом и полем ввода текста ответа. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: define $N smth

Задает N-ый аргумент скрипта равным smth. Отмечу, что smth используется как есть (с символами ‘'’ если присутствуют). Выполняется только подстановка других макроопределений $0...$9, $a...$z. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: define name smth

Определяет константу (скаляр) с именем name и числовым значением smth. Позднее она может быть использована как обычное число.

Команда MGL: defchr $N smth

Задает N-ый аргумент скрипта равным символу с UTF кодом smth. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: defnum $N smth

Задает N-ый аргумент скрипта равным числовому значению smth. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: call 'fname' [ARG1 ARG2 ... ARG9]

Переходит к выполнению (вызывает) подпрограммы fname (или внешнего скрипта, если функция не была найдена). Опциональные аргументы передаются в подпрограмму. См. также func.

Команда MGL: func 'fname' [narg=0]

Определяет подпрограмму с именем fname и задает число требуемых аргументов. Аргументы будут помещены в параметры скрипта $1, $2, ... $9. Отмечу, что выполнение основной программы будет остановлено при встрече func – действует аналогично комманде stop. См. также return.

Команда MGL: return

Возвращается из подпрограммы. См. также func.

Команда MGL: load 'filename'

Загружает дополнительные команды MGL из внешней динамической библиотеки filename. Данная библиотека должна содержать массив с именем mgl_cmd_extra типа mglCommand, который содержит описание новых комманд.

Команда MGL: if val then CMD

Выполняет команду CMD только если val не ноль.

Команда MGL: if val

Начинает блок команд, выполняемый если val не ноль.

Команда MGL: if dat 'cond'

Начинает блок команд, выполняемый если каждый элемент dat удовлетворяет условию cond.

Команда MGL: elseif dat 'cond'

Начинает блок команд, выполняемый если предыдущий if или elseif не был выполнен и каждый элемент dat удовлетворяет условию cond.

Команда MGL: elseif val

Начинает блок команд, выполняемый если предыдущий if или elseif не был выполнен и val не ноль.

Команда MGL: else

Начинает блок команд, выполняемый если предыдущий if или elseif не был выполнен.

Команда MGL: endif

Заканчивает определение блока if/elseif/else.

Команда MGL: for $N v1 v2 [dv=1]

Начинает блок команд, выполняемый в цикле с $N-ым аргументом изменяющимся от v1 до v2 с шагом dv. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: for $N dat

Начинает блок команд, выполняемый в цикле с $N-ым аргументом пробегающим значения массива dat. Здесь N это цифра (0...9) или буква (a...z).

Команда MGL: next

Заканчивает блок цикла for.

Команда MGL: do

Начинает бесконечный цикл.

Команда MGL: while val

Переходит к следующей итерации цикла если val не ноль, в противном случае заканчивает цикл.

Команда MGL: while dat 'cond'

Переходит к следующей итерации цикла если dat удовлетворяет условию cond, в противном случае заканчивает цикл.

Команда MGL: once val

Определяет код (между once on и once off) который будет выполнен только один раз. Полезно для работы с большими данными в программах типа UDAV.

Команда MGL: stop

Останавливает выполнение скрипта.

Команда MGL: variant val

Задает вариант аргумента(ов), разделенных символом ‘?’, для всех последующих комманд.

Команда MGL: rkstep eq1;... var1;... [dt=1]

Выполняет один шаг решения системы обыкновенных дифференциальных уравнений {var1’ = eq1, ... } с временным шагом dt. Здесь переменные ‘var1’, ... – переменные, определенные в MGL скрипте ранее. При решении используется метод Рунге-Кутта 4-го порядка.