Опции DO:   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Ресивер DO (циклическая функция)


!!DO#1/#2/#3/#4:XXXX; - вызывает функцию несколько раз.
         #1 – номер функции
         #2 – начальное значение
         #3 – конечное значение
         #4 – шаг
Комментарий (показать)

Как и для FU, если вы вызываете циклическую ф-цию инструкцией, тело функции должно быть описано ДО инструкции !#DO.
Переменная x16 всегда хранит номер текущего круга функции. Например, если дельта функции (конечное значение минус начальное) равна 12, в первый раз x16 будет равно 1, во второй 2 и т.д. до 12. Изменяя переменную x16 фактически можно замедлять или ускорять выполнение функции, или завершить её, установив в x16 конечное значение функции (можно большее конечного значения). Помните - параметры функций можно устанавливать только внутри самой функции! Для каждой функции все x-переменные (x1..x16) уникальны, т.е. две разные функции будут иметь разные значения x-переменных.
Замечание(показать)
Переменные x1..x15 устанавливаются только один раз при старте функции, а x16 – один раз для каждого круга циклической функции.
Синтаксис "?$" поддерживается, но значения будут установлены по окончании выполнения фукции, а не на каждом её круге, как это описано ниже.


Пример 1 (показать)
Вы должны увидеть следующее:

Пример 2 (показать)
Вместо 66 вы получите лишь 9 циклов, с такими значениями:
x16:	 1	 9	17	25	33	41	49	57	 65
v5:	47	39	31	23	15	 7	-1	-9	-17
Также !!VRx16:+7; может быть заменено (например) на R7: или (например) с Rx2:

Вопросы и ответы (показать)

Как x16 влияет на "вложенные" DO-ресиверы?
Каждый DO-ресивер имеет своё отдельное значение x16.

Скажем, у меня есть следующий код: (это будет отражать, скажем, проверку массива 10х11 для чего-либо). Мой вопрос - точка Б будет иметь значение x16 между 1 и 10 или между 20 и 30?
Между 20 и 30.

Также, в точке А x16 будет принимать значение от DO1 или DO2?
DO1, потому что линия находится внутри функции FU1.

У меня есть главная функция, покрывающая всех героев (DO1/0/155/1), но у каждого героя я должен узнать существ в его слотах (DO2/0/6/1). Как это можно?
Это решается простым "вложением" одной функции в другую.

См. также: ресиверы-циклы re/br/co


P$1[/$2/$3/../$16]
$1, $2 … $16 служат для установки x1..x16. Эти параметры могут быть использованы где угодно (в пределах функции) вместо использования стандартных переменных. Когда вы вызываете другую функцию, все параметры будут наследованы.
Функция начинает работать после указания команды P, например: Все команды ERM (ресиверы, инструкции) для использования имеют хотя бы один параметр в обязательном порядке.

Расширение синтаксиса ресивера DO (показать)

Ресиверы FU и DO имеют расширенный синтаксис для запоминания некоторых значений. Теперь вы можете использовать синтаксис "?$" (получить) для записи значения в переменную. Вы можете использовать v, y- или y переменные для записи значений.
Например: Теперь, если вы измените значение переменной x4 внутри функции, к примеру: !!VRx4:Sx1;, - значение будет скопировано в v4 после окончания циклич.функции (цикла). Само значение переменной (v4) не передаётся в x4 при вызове функции, взамен передаёт номер переменной (в примере x4 будет равно 4). В ресивере DO значение номера (4) будет одинаковым при каждом цикле.
Так, если вы установите её внутри тела функции, значение будет скопировано в переменную-получатель после окончания цикла и восстановлено на индекс переменной в начале следующего цикла.
Пример (показать)

Также, вы можете использовать синтаксис "=$" для установки значения на каждом цикле DO. Т.е если вы измените данную переменную внутри тела функции, переменная будет допущена в следующий цикл функции изменённой.
Замечание: используйте такой синтаксис для циклич. фунций предельно внимательно, иначе ваш скрипт будет работать не так как задумывалось, и вы не сразу поймёте причину ошибки.

Примеры (показать)

В таком случае вы получите значения x1 равными 10, 11, 12, 13… при начале каждого цикла.
Но если вы напишите код как то x1 будет равен 10, 10, 10… в начале каждого цикла.
Можно использовать несколько таких переменных в функции.

Вы можете использовать похожие переменные (см. пример ниже) с синтаксисом "?$" и "=$".