Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:coding [2013/12/09 09:59] newsash старая ревизия восстановлена с небольшими изменениями (2013/12/05 13:45) на мой взгляд эта версия лучше отражает смысл, можем обсудить |
help:coding [2024/12/01 10:29] (текущий) aleks_versus |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
[[help:expressions|Назад: Выражения]] | [[help:expressions|Назад: Выражения]] | ||
- | =====Программный код===== | + | ====== Программный код ====== |
- | * Код на QSP состоит из команд - единиц кода, отвечающих за какое-либо конкретное действие: вывод на экран, добавление действия, добавление предмета в инвентарь, задание значения переменной, ... | + | Выполнение кода в плеере **QSP** происходит последовательно, команда за командой, сверху вниз и слева направо: |
- | * Команды выполняются одна за другой, последовательно. | + | |
- | * Чаще всего новая команда пишется на следующей строке после предыдущей. | + | <sxh qsp> |
- | * Для лучшей читаемости кода бывает полезно пропускать строку между блоками однородных команд.<sxh qsp> | + | *pl "Первая команда" |
+ | *pl "Вторая команда" | ||
+ | *pl "Третья команда" | ||
+ | |||
+ | *pl "Четвёртая команда" & *pl "Пятая команда" & *pl "Шестая команда" | ||
+ | </sxh> | ||
+ | |||
+ | ===== Структура команд ===== | ||
+ | |||
+ | Все команды в **QSP** составляются по общим принципам: | ||
+ | |||
+ | <sxh qsp> | ||
+ | {оператор} [значение 1], [значение 2], ..., [значение 20] | ||
+ | </sxh> | ||
+ | |||
+ | Здесь вместо ''%%{оператор}%%'' может и должен стоять любой оператор **QSP** из тех, что перечислены в разделе [[help:keywords_operator|"Ключевые слова. Операторы"]]. Если в команде нет ''%%{оператор}%%'', значит на самом деле на этом месте подразумевается **неявный оператор**. | ||
+ | |||
+ | <sxh qsp> | ||
+ | ! здесь используются явные операторы: | ||
+ | *pl "Ехал Грека Через Реку" | ||
+ | addobj "Рак" | ||
+ | |||
+ | ! а здесь имеет место неявный оператор: | ||
+ | 137 + 294 | ||
+ | func('pow', 3, 3) | ||
+ | </sxh> | ||
+ | |||
+ | В качестве значений ''%%[значение 1]%%'', ''%%[значение 2]%%'', … ,''%%[значение 20]%%'' могут выступать строковые или числовые константы, переменные, значения функций, или целые выражения, а число таких значений зависит от назначения оператора. Например, для оператора ''%%*PL%%'' может быть указано лишь одно значение, а для оператора ''%%ADDOBJ%%'' от одного до трёх таких значений. Сами значения перечисляются через запятую. | ||
+ | |||
+ | <sxh qsp> | ||
+ | *pl "Три в кубе это "+func('pow',3,3)+". Да, серьёзно. А ты не верил?" | ||
+ | addobj "Апельсинка", "img/orange.png", 1 | ||
+ | </sxh> | ||
+ | |||
+ | Если необходимо, то для удобства чтения кода значения для операторов можно (но не обязательно) помещать в круглые скобки: | ||
+ | |||
+ | <sxh qsp> | ||
+ | pl("Строка текста") | ||
+ | addobj("Отвёртка","img/screwdriver.png",3) | ||
+ | </sxh> | ||
+ | |||
+ | **Внимание!** В одной команде не может быть более одного оператора! Равно так же не может быть команды совсем без оператора. Если в вашей команде нет оператора, то вы имеете дело с **неявным оператором**. | ||
+ | |||
+ | Операция присваивания предполагает, что перед именем переменной стоит оператор ''%%SET%%'', хотя обычно этот оператор опускают, то есть его тоже можно назвать "неявным": | ||
+ | |||
+ | <sxh qsp> | ||
+ | [имя_переменной] = [значение] | ||
+ | </sxh> | ||
+ | |||
+ | Здесь ''%%=%%'' — это операция присваивания. Не путайте с операцией сравнения **равно**. | ||
+ | |||
+ | ===== Порядок записи команд ===== | ||
+ | |||
+ | Вот несколько правил и рекомендаций для корректного написания кода: | ||
+ | |||
+ | * Каждую отдельную команду нужно записывать в отдельной строке. | ||
+ | * Отступы (пробелы и символы табуляции) перед командой и после неё игнорируются плеером, поэтому вы можете ставить их в нужном количестве для удобства чтения кода: <sxh qsp> | ||
+ | *p "<table width=240>" | ||
+ | *p "<tr>" | ||
+ | *p "<td>Имя:</td>" | ||
+ | *p "<td>" | ||
+ | *p $name | ||
+ | *p "</td>" | ||
+ | *p "</tr>" | ||
+ | *p "<tr>" | ||
+ | *p "<td>возраст:</td>" | ||
+ | *p "<td>" | ||
+ | *p age | ||
+ | *p "</td>" | ||
+ | *p "</tr>" | ||
+ | *p "</table>" | ||
+ | </sxh> | ||
+ | * Пустые строки так же игнорируются плеером, поэтому для лучшей читаемости кода вы можете размещать их между командами: <sxh qsp> | ||
яблоко = 1 | яблоко = 1 | ||
груша = 1 | груша = 1 | ||
- | |||
*pl 'Яблок' + яблоко | *pl 'Яблок' + яблоко | ||
*pl 'Груш' + груша | *pl 'Груш' + груша | ||
</sxh> | </sxh> | ||
- | * Иногда для лучшей читаемости кода можно написать несколько команд в одну строку. | + | * При необходимости можно написать несколько команд в одну строку. При этом в качестве разделителя команд служит символ "**&**" (не путайте с операцией объединения строк): <sxh qsp> |
- | * Между командами ставится знак '**&**'. | + | яблоко+=1 & *pl "У меня есть <<яблоко>> яблок." & яблоко_взял=1 |
- | * Без необходимости делать так __не__ рекомендуется, так как: | + | </sxh> Без необходимости так делать не рекомендуется, поскольку это ухудшает читаемость кода, а так же повышает вероятность допустить [[glossary:bag|баг]]. Подобное перечисление команд уместно в гиперссылках: <sxh qsp> |
- | * Код может стать трудночитаемым | + | *pl '<a href="EXEC: яблоко += 1 & GT $CURLOC">яблоко</a>' |
- | * Повышается вероятность допустить [[баг|баг]]. | + | </sxh> В данном случае при нажатии на ссылку выполнится код: <sxh qsp> |
- | * //Пример://<sxh qsp>i = 0 | + | яблоко += 1 |
- | j = 0</sxh> равнозначно <sxh qsp>i = 0 & j = 0</sxh> | + | GT $CURLOC |
- | * Внутреннюю часть многострочных операторов рекомендуется сдвигать вправо 2-4 пробелами. | + | </sxh> |
- | * Это никак не влияет на выполнение, но делает код более читаемым:<sxh qsp> | + | * Внутреннюю часть многострочных операторов рекомендуется сдвигать вправо 2-4 пробелами (или одним символом табуляции). Это никак не влияет на выполнение, но делает код более читаемым: <sxh qsp> |
IF яблоки=0 : | IF яблоки=0 : | ||
- | ADDOBJ 'Яблоко' | + | ADDOBJ 'Яблоко' |
- | яблоки = 1 | + | яблоки = 1 |
END | END | ||
</sxh> | </sxh> | ||
- | * Изредка для повышения читаемости кода приходится разбивать строку на несколько. | + | * Крайне редко для повышения читаемости кода приходится разбивать строку на несколько. Такая строка хотя и будет в коде разбита на части, но будет восприниматься плеером, как единая (сообщения об ошибках будут выводится с учётом того, что это одна строка). Чтобы следующая строка считалась частью текущей, нужно в конце текущей строки дописать ''%% _%%'' (пробел и символ подчёркивания): <sxh qsp> |
- | * Вместо разбиения строки рекомендуется видоизменить код так, чтобы это не требовалось. | + | |
- | * Строка будет разбита в коде на части, но будет восприниматься интерпретатором как единая. | + | |
- | * Чтобы следующая строка считалась частью текущей, нужно в конце строки дописать **' _'** (пробел и символ подчёркивания):<sxh qsp> | + | |
if a<5 and n-b>4+5+h/7*2 or t=4: p 'TTTTTTTTT' & cla & $f='Text Variable' & goto 'FFFF' | if a<5 and n-b>4+5+h/7*2 or t=4: p 'TTTTTTTTT' & cla & $f='Text Variable' & goto 'FFFF' | ||
</sxh> равнозначно <sxh qsp> | </sxh> равнозначно <sxh qsp> | ||
if a<5 and _ | if a<5 and _ | ||
- | n-b>4+5+h/7*2 or _ | + | n-b>4+5+h/7*2 or _ |
- | t=4: p 'TTTTTTTTT' _ | + | t=4: p 'TTTTTTTTT' _ |
- | & cla & $f='Text Variable' _ | + | & cla & $f='Text Variable' _ |
- | & goto 'FFFF' | + | & goto 'FFFF' |
+ | </sxh> Вместо разбиения строки рекомендуется видоизменить код так, чтобы разбивать строку не требовалось. **Обратите внимание.** Сочетание символов ''%%_%%'' (пробел и символ подчёркивания) при склеивании строк заменяется на пробел, поэтому такой код: <sxh qsp> | ||
+ | t _ | ||
+ | or _ | ||
+ | t | ||
+ | </sxh> будет эквивалентен такому коду: <sxh qsp> | ||
+ | t or t | ||
+ | </sxh> Разбивать команду на две строки внутри строковой константы нельзя: <sxh qsp> | ||
+ | ! на экране мы увидим две строки текста, а не одну: | ||
+ | *pl "Это строка, которую я хочу разбить _ | ||
+ | на две строки кода, но при выводе видеть одну строку" | ||
</sxh> | </sxh> | ||
- | * Группа строк, разделённых " _", считается **//одной//** строкой (сообщения об ошибках также выводятся с учётом того, что это одна строка). | ||
- | * После **OR** стоит не один, а **//два//** пробела - один пробел расходуется на " _", получилось бы "ort=4" вмето "or t=4". | ||
- | * Исправлено: в более новых версиях (//Quest Navigator//, возможно даже в //AeorQSP//) пробел сохраняется. | ||
- | ====Комментарии==== | + | ===== Комментарии ===== |
+ | |||
+ | Оператор комментария ''%%!%%'' служит для комментирования кода и позволяет оставлять "заметки на полях", которые помогут впоследствии ориентироваться в коде. Всё, что следует за оператором комментария, плеер игнорирует. | ||
+ | |||
+ | Поскольку ''%%!%%'' — это оператор (не путайте с операцией **не равно**), если вы пишете его на одной строке с другими командами, нужно обязательно ставить разделитель ''%%&%%'' (амперсанд) между последней командой и оператором комментария: | ||
- | Оператор комментария (символ '**!**') служит для комментирования кода и позволяет оставлять "заметки на полях", которые помогут впоследствии ориентироваться в коде. Комментарии игнорируются интерпретатором. | ||
<sxh qsp> | <sxh qsp> | ||
- | !Однострочный комментарий | + | ! это комментарий в отдельной строке |
- | яблоки = 0 | + | яблоки = 0 & ! а это комментарий в строке с командой |
+ | </sxh> | ||
+ | |||
+ | Исключением из этого правила является установка комментария после двоеточия в многострочном условии, цикле или действии. В этом случае амперсанд не нужен: | ||
+ | |||
+ | <sxh qsp> | ||
+ | act "Взять яблоко": ! многострочное действие | ||
+ | addobj "Яблоко" | ||
+ | яблоко += 1 | ||
+ | end | ||
+ | </sxh> | ||
+ | |||
+ | Так как весь текст после оператора комментария будет проигнорирован плеером, комментарий надо ставить всегда самым последним в строке из нескольких команд: | ||
+ | |||
+ | <sxh qsp> | ||
+ | ! комментарий. Следующие команды не работают: & *pl "Первая команда" & *pl "вторая команда" | ||
+ | *pl "Эта команда работает" & ! а остальные нет & *pl "вторая команда" & *pl "третья команда" | ||
+ | *pl "Эта команда работает" & *pl "и эта работает" & ! а последняя нет & *pl "третья команда" | ||
+ | *pl "Все три" & *pl " команды" & *pl "работают" & ! а это комментарий | ||
+ | </sxh> | ||
+ | |||
+ | Комментарии бывают двух видов: однострочные и многострочные. | ||
+ | |||
+ | * Однострочный комментарий начинается от оператора комментария и заканчивается с концом строки: <sxh qsp> | ||
+ | ! Однострочный комментарий | ||
+ | ! и это однострочный комментарий | ||
+ | яблоки = 0 & ! и это однострочный комментарий | ||
+ | </sxh> | ||
+ | * Многострочный комментарий так же начинается от оператора комментария и заканчивается с концом строки, однако при использовании кавычек (''%%" "%%''), апострофов (''%%' '%%'') или фигурных скобок, он может захватывать так же и те строки, что размещены внутри кавычек, апострофов или фигурных скобок: <sxh qsp> | ||
!'Многострочный | !'Многострочный | ||
- | комментарий' | + | комментарий в апострофах' |
яблоки = 1 | яблоки = 1 | ||
- | сыр = 5 & ! А здесь"комментарий начинается | + | сыр = 5 & ! А здесь "комментарий начинается |
- | в той же строке, но" заканчивается 'сильно | + | в той же строке, но" заканчивается 'сильно |
- | позже'. Во всём виноваты {кавычки и скобки | + | позже'. Во всём виноваты {кавычки и скобки |
- | }Кстати: | + | } Кстати: |
- | яблоки=0 | + | яблоки = 0 |
- | !'Комментарии рекомендуется писать всё-таки | + | !'Комментарии рекомендуется писать всё-таки |
- | в отдельных строках, а не как с "сыром"' | + | в отдельных строках, а не как бутерброд с "сыром"' |
</sxh> | </sxh> | ||
- | **Примечание:** при выводе ошибок многострочные комментарии считаются интерпретатором за одну строку. | + | ===== Запись констант ===== |
+ | |||
+ | Под константами в **QSP** подразумеваются конкретные числовые или строковые значения. Конкретный кортеж (запись значений в квадратных скобках) тоже можно назвать константой. В следующем примере для операторов вывода текста указаны конкретные значения, это и есть константы: | ||
+ | |||
+ | <sxh qsp> | ||
+ | ! вывод на экран числа 137. Можно назвать это число константой. | ||
+ | *pl 137 | ||
+ | ! вывод на экран строки текста. Эту строку можно назвать константой | ||
+ | *pl "На окошке крошку-мошку ловко ловит лапой кошка" | ||
+ | ! выводим на экран кортеж. Кортеж тоже может быть константой | ||
+ | *pl [13, 'unit', 37] | ||
+ | </sxh> | ||
+ | |||
+ | Для записи числовых констант (чисел) используются символы цифр без дополнительных обозначений: | ||
+ | |||
+ | <sxh qsp> | ||
+ | x = 145 & ! 145 здесь - константа | ||
+ | (137+299*2)/11-19 & ! целое выражение из числовых констант | ||
+ | </sxh> | ||
+ | |||
+ | Для записи строковых констант (строк) используются символы, отмечающие начало и конец такой строковой константы. Можно использовать кавычки (''%%" "%%''), апострофы (''%%' '%%''), или фигурные скобки (''%%{ }%%''): | ||
+ | |||
+ | <sxh qsp> | ||
+ | *pl "Это строковая константа" | ||
+ | *pl 'И это строковая константа' | ||
+ | *pl {И даже это} | ||
+ | </sxh> | ||
+ | |||
+ | Более подробно о правилах записи строк в **QSP** можно почитать в разделе [[help:strings|"Строки"]]. | ||
+ | |||
+ | Для записи кортежей используются квадратные скобки: | ||
+ | |||
+ | <sxh qsp> | ||
+ | *pl ['это кортеж', 'если он ', "не присвоен переменной", "его можно считать константой"] | ||
+ | </sxh> | ||
+ | |||
+ | См. также [[howto:namedconst|"Именованные константы"]]. | ||
+ | |||
+ | ===== Операторы и функции ===== | ||
+ | |||
+ | **Оператор** - ключевое слово (команда) языка **QSP**, выполняющее какое-либо действие. Оператор может иметь параметры (аргументы), которые задаются выражениями. Операторы не возвращают результат выполнения. | ||
- | ====Операторы и функции==== | ||
- | **Оператор** - ключевое слово (команда языка QSP), выполняющее какое-либо действие. Оператор может иметь параметры (аргументы), которые задаются выражениями. Операторы не возвращают результат выполнения.\\ | ||
Как правило, операторы меняют состояние игры. | Как правило, операторы меняют состояние игры. | ||
+ | |||
+ | Каждая команда **QSP** содержит один оператор и его аргументы (параметры). Если вы написали команду без оператора, то в ней обязательно присутствует **неявный оператор**. | ||
<sxh qsp> | <sxh qsp> | ||
- | !'Общий вид вызова оператора | ||
- | имя_оператора аргумент1, аргумент2, ... | ||
- | или | ||
- | имя_оператора (аргумент1, аргумент2, ...) | ||
- | ' | ||
!Примеры вызовов операторов: | !Примеры вызовов операторов: | ||
ADDOBJ 'ключ','pics/key.png' | ADDOBJ 'ключ','pics/key.png' | ||
ADDOBJ ('ключ','pics/key.png') | ADDOBJ ('ключ','pics/key.png') | ||
- | PL ('текст') | + | PL('текст') |
CLEAR() | CLEAR() | ||
</sxh> | </sxh> | ||
- | **Функция** - ключевое слово, которое используется для того, чтобы что-нибудь узнать. Например, сколько предметов игрок несёт в рюкзаке. Для этого, в коде мы указываем функцию, и необходимые для расчёта параметры (аргументы функции). Результат, "посчитанный" этой функцией, подставляется на её место в выражении. На языке программистов это называется "функция была вызвана и вернула значение".\\ | + | **Функция** - ключевое слово, которое используется для того, чтобы получить какое-либо значение. Например, сколько предметов игрок несёт в рюкзаке. Для этого, в коде мы указываем функцию, и необходимые для расчёта параметры (аргументы функции). Результат, "посчитанный" этой функцией, подставляется на её место в **выражении**. На языке программистов это звучит так: **"мы вызвали функцию, и функция вернула нам значение"**. |
- | Как правило, при вызове функции состояние игры не меняется. | + | |
+ | Как правило, при вызове функции состояние игры не меняется. Примеры вызовов функций: | ||
<sxh qsp> | <sxh qsp> | ||
- | !Примеры вызовов функций: | + | maximum = MAX(1, 2, 4) |
- | X = MAX(1, 2, 4) | + | случайное_число = RAND(4) |
- | A = RAND(4) | + | предметов_в_рюкзаке = COUNTOBJ |
- | B = COUNTOBJ | + | |
- | PL STR(43) | + | |
PL $STR(43) | PL $STR(43) | ||
- | !Последние два выражения эквивалентны | ||
</sxh> | </sxh> | ||
- | **Примечание:** при использовании функций возвращающих текстовое значение настоятельно рекомендуется приписывать перед именем функции символ '**$**' для улучшения читаемости кода. | + | В одной команде может быть вызвано несколько функций: |
- | **Примечание:** Максимальное количество аргументов равно **10** | + | <sxh qsp> |
+ | *pl "Случайный предмет: "+$getobj(rand(1,countobj)) | ||
+ | bcolor = rgb(func('hex_in_dec','ff'),func('hex_in_dec','34'),func('hex_in_dec','67')) | ||
+ | </sxh> | ||
- | ====Базовые функции==== | + | При использовании функций, возвращающих текстовое значение, настоятельно рекомендуется прописывать перед именем функции символ ''%%$%%'' для улучшения читаемости кода. |
- | Это те функции, которые я пока никуда не пристроил. | + | |
- | * **QSPVER** - возвращает версию библиотеки интерпретатора в формате "X.Y.Z". | + | Максимальное число аргументов для операторов и функций в **QSP**: 20. |
- | * **CURLOC** - возвращает название текущей локации. | + | |
- | * Математические функции | + | ===== Базовые функции ===== |
- | * **RAND(**//[#выр1]//**,**//[#выр2]//**)** - возвращает случайное число между числами //[#выр]// и //[#выр2]//. | + | |
- | * Параметр //[#выр2]// может отсутствовать, при этом он принимается равным 0. | + | * ''%%$QSPVER%%'' - возвращает версию библиотеки плеера в формате "X.Y.Z Player". Например, классический плеер версии 5.9.0. возвращает значение "5.9.0 (classic)", а qSpider просто "5.9.0". Пример использования: <sxh qsp> |
- | * В более поздних версиях библиотеки //[#выр2]// по умолчанию принимается за 1. | + | if $QSPVER<'5.9.0': |
- | * //Примеры://<sxh qsp> | + | *pl "Ваша версия плеера не подходит для данной игры. Установите плеер версии 5.9.0." |
- | RAND(1,4) &! вернёт случайное значение от 1 до 4 | + | end |
- | RAND(4,1) &! вернёт случайное значение от 1 до 4 | + | </sxh> Так же данная функция может возвращать платформу, на которой запущена игра, если указать аргументом значение "platform": <sxh qsp> |
- | RAND(1000) &! вернёт случайное значение от 0(1) до 1000 | + | $QSPVER('platform') |
- | RAND 1000 &! вернёт случайное значение от 0(1) до 1000</sxh> | + | </sxh> |
- | * **RND** - возвращает случайное значение от 1 до 1000. | + | * ''%%$CURLOC%%'' - возвращает название текущей локации. |
- | * **MAX(**//[выр1]//**,**//[выр2]//**,** ...**)** - возвращает максимальное из значений выражений-аргументов. | + | |
- | * Если передан один аргумент, то считается, что указано имя массива. | + | ==== Математические функции ==== |
- | * //Примеры://<sxh qsp> | + | |
+ | * ''RAND([#выр1],[#выр2],[#мода])'' - возвращает случайное число между числами ''[#выр]'' и ''[#выр2]''. | ||
+ | * Параметр ''[#мода]'' позволяет указать число, которое должно выпадать более часто, чем остальные. При этом распределение частоты выпадения будет плавно изменяться для всех остальных чисел. Подробнее о распределении читайте в статье [[howto:randomize|Третий параметр RAND]]. | ||
+ | * Если 3й параметр не указан, то функция возвращает случайное число в заданном диапазоне с равномерным/равновероятным распределением чисел. | ||
+ | * Параметр ''[#выр2]'' может отсутствовать, при этом он принимается равным единице (**''1''**). | ||
+ | * Примеры: <sxh qsp> | ||
+ | RAND(1,4) & ! вернёт случайное значение от 1 до 4 | ||
+ | RAND(4,1) & ! вернёт случайное значение от 1 до 4 | ||
+ | RAND(1000) & ! вернёт случайное значение от 1 до 1000 | ||
+ | RAND 1000 & ! вернёт случайное значение от 1 до 1000 | ||
+ | |||
+ | x = RAND(1, 1000, 500) & ! чаще будет выпадать 500 | ||
+ | x = RAND(1, 1000, 1) & ! чаще будет выпадать 1 | ||
+ | x = RAND(1, 1000, 1000) & ! чаще будет выпадать 1000 | ||
+ | x = RAND(-1000, 0, -500) & ! чаще будет выпадать -500 | ||
+ | x = RAND(1, 1000, 5000) & ! чаще будет выпадать 1000 | ||
+ | x = RAND(-1000, -100, -5000) & ! чаще будет выпадать -1000 | ||
+ | </sxh> | ||
+ | * ''RND'' - возвращает случайное значение от 1 до 1000. | ||
+ | * ''MAX([выр1],[выр2], ...)'' - возвращает максимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> | ||
MAX(1,2,5,2,0) &! вернёт 5 | MAX(1,2,5,2,0) &! вернёт 5 | ||
MAX(a,b,c) &! вернёт максимальное из значений переменных a,b,c | MAX(a,b,c) &! вернёт максимальное из значений переменных a,b,c | ||
MAX('aa','ab','zz') &! вернёт 'zz' | MAX('aa','ab','zz') &! вернёт 'zz' | ||
- | MAX('a') &! вернёт максимальное из значений элементов массива "a" | + | MAX('a') &! вернёт максимальное из числовых значений элементов массива "a" |
- | MAX('$b') &! вернёт максимальное из значений элементов массива "$b"</sxh> | + | MAX('$b') &! вернёт максимальное из текстовых значений элементов массива "$b" |
- | * **MIN(**//[выр1]//**,**//[выр2]//**,** ...**)** - возвращает минимальное из значений выражений-аргументов. | + | </sxh> |
- | * Если передан один аргумент, то считается, что указано имя массива. | + | * ''%%MIN([выр1],[выр2], …)%%'' - возвращает минимальное из значений выражений-аргументов. Если передан один аргумент, то считается, что указано имя массива: <sxh qsp> |
+ | MIN(1,2,5,2,0) &! вернёт 0 | ||
+ | MIN(a,b,c) &! вернёт минимальное из значений переменных a,b,c | ||
+ | MIN('aa','ab','zz') &! вернёт 'aa' | ||
+ | MIN('a') &! вернёт минимальное из числовых значений элементов массива "a" | ||
+ | MIN('$b') &! вернёт минимальное из текстовых значений элементов массива "$b" | ||
+ | </sxh> | ||
+ | |||
+ | [[help:cycle|Вперёд: Циклы]] | ||
- | ---- | ||
- | [[help:arrays|Вперёд: Массивы]] |