РефалАБ. Руководство пользователя

2. Описание библиотеки

Введение

В состав языка программирования РефалАБ входит набор функций и спецификаторов, которые могут быть использованы в РефалАБ-программах в качестве внешних. Эти функции и спецификаторы хранятся в библиотеке объектных модулей, входящей в состав РефалАБ-системы.

Чтобы использовать любую из этих функций или спецификаторов в программе, написанной на РефалАБ, необходимо объявить ее внешней в соответствующем модуле с помощью директивы EXTRN.

Часть библиотечных функций, часть библиотечных пустых функций и спецификаторы написаны на РефалАБ. Остальные библиотечные функции, включая пустые, реализованы на языке Си и являются первичными.

2.1. Функции ввода-вывода

Функции ввода-вывода предназначены для организации простейшего диалогового взаимодействия между пользователем и программой. Такими функциями являются:

Функции print, prout, prints, prouts, printm, proutm, write, wrout, writes, wrouts, writem и wroutm различаются возвращаемым в поле зрения значением, способом представления информации на экране и переходом в конце на новую строку.

Ввод и вывод может быть переназначен в произвольный файл средствами операционной системы.

2.2. Функции и спецификаторы арифметики

Функции арифметики работают с целыми числами. Целое число - это последовательность макроцифр (т.е. “цифр” в позиционной системе счисления по основанию 2^32), которой может предшествовать символ знака. Примерами целых чисел являются:

'+' 14
545
'-' 8
1 0 - значение этого числа равно 2^32=4294967296
'-' 3 2035 - значение этого числа равно -12884903923
0

Целое число нуль представляется либо нулевой макроцифрой 0, либо пустым выражением.

Все функции арифметики, кроме p1 и m1, допускают использование пустого выражения в качестве аргумента и воспринимают его как нуль. При этом, некоторые функции выдают нулевой результат работы в виде макроцифры 0, а некоторые - в виде пустого выражения, т.к. в некоторых случаях это удобно.

К функциям арифметики относятся:

Отдельно стоящими функциями являются:

Также в библиотеке есть спецификатор Max_Number - максимальное значение макроцифры.

2.3. Функции битовых операций

В библиотке РефалАБ есть функции битовых операций:

2.4. Функции сравнения

В РефалАБ используются два вида сравнения: сравнение целых чисел и лексикографическое сравнение выражений. Поэтому в библиотеке РефалАБ функции сравнения делятся на две группы в зависимости от вида сравнения.

Группа функций сравнения целых чисел:

Группа функций лексикографического сравнения выражений:

2.5. Функции, пустые функции и спецификаторы булевой логигки

В библиотеке РефалАБ есть функции булевой логигки:

Также в библиотеке РефалАБ есть пустые функции:

В библиотеке есть спецификатор Bool - логический тип.

2.6. Функции, пустые функции и спецификаторы лексического анализа

Стандартная библиотека РефалАБ содержит ряд функций, полезных при выполнении лексического анализа в трансляторах, системах естественноязыкового общения, языковых конверторах и т.д. Такими функциями являются:

Также есть пустые функции:

Для преобразования целых чисел в символьный вид и обратно используются следующие функции:

Также в библиотеке есть спецификатор White_Spaces - множество пробелов.

2.7. Функции, пустые функции и спецификаторы для работы с символьными файлами

Описываемые в этом разделе функции позволяют работать не более чем с десятью файлами одновременно.

К этим функциям относятся следующие функции:

Функции fopen, Load_File, Save_File, Append_File, Load_FBytes, Save_FBytes, Append_FBytes связывают с заданным именем файла определенный номер (число от 0 до 9). Для выполнения какой-либо операции с файлом с помощью функций fgets, fputs, fprint, fprints, fprintm, fread, fwrite, fseek, ftell, is_feof, is_ferror, fclose следует указывать его номер, помещая соответствующую макроцифру в аргументе.

Также есть пустые функции:

В библиотеке есть спецификаторы:

Также работа с файлами производится с помощью следующих первичных функций:

2.8. Функция порождения процесса

Функция try позволяет писать программы, анализирующие аварийные ситуации типа “Отождествление невозможно” или “Свободная память исчерпана” и предпринимающие некоторые дальнейшие действия по обработке таких ситуаций.

Функция try порождает новое поле зрения, помещает в него функциональный терм, определенный в ее аргументе, и пытается вычислить его. Результат такой попытки возвращается в то поле зрения, из которого была вызвана try.

После того, как результат замены сформирован, дополнительное поле зрения, созданное в результате обращения к try, уничтожается.

Можно обращаться к try рекурсивно. В этом случае образуется стек из полей зрения, однако глубина рекурсии ограничена. Увеличив размер данного стека, можно увеличить глубину вложенности try.

2.9. Функции для работы с символами-метками

В некоторых случаях возникает необходимость превратить цепочку объектных символов в символ-метку или, наоборот, получить из символа-метки цепочку объектных символов, составляющих его тело. Например, из цепочки символов ‘ABCDE’ построить символ &ABCDE или символ-метку &label превратить в цепочку ‘LABEL’. При этом должно выполняться следующее требование: если мы будем превращать одну и ту же цепочку символов в символ-метку несколько раз, то все созданные символы-метки должны быть равны друг другу, т.е. являться экземплярами одного и того же символа.

Для создания символов-меток и обратного превращения их в цепочки объектных символов используются функции ftochar, chartof и functab:

2.10. Функции для работы с копилкой

Библиотека РефалАБ содержит пять первичных функций для работы с копилкой:

Подробное описание копилки и операций для работы с ней представлено в 1 разделе.

2.11. Функции для работы со статическими и динамическими ящиками

Средством РефалАБ, дающим возможность обрабатывать произвольные графы, являются статические и динамические ящики.

Библиотека РефалАБ содержит шесть первичных функций для работы с ящиками:

Подробное описание этих функций представлено в 1 разделе.

2.12. Функции для работы со временем

Библиотека содержит ряд функций для работы со временем:

2.13. Функция удаления функциональных термов в поле зрения

Функция delf позволяет писать программы, анализирующие поле зрения и удаляющие из него определенные функциональные термы.

Функция delf изменяет поле зрения, удаляя из него функциональные термы, находящиеся в определенной цепочке, являющаяся частью последовательности становления ведущими функциональных термов. Начало цепочки - функциональный терм, который станет ведущим после ведущего функционального терма, т.е. после вызова функции delf. Конец цепочки - функциональный терм, за которым следует сразу символ ‘#’. Также удаляется символ ‘#’.

2.14. Функции высшего порядка

В РефалАБ можно создавать функции высшего порядка, т.е. функции, содержащие в аргументе функции либо в виде символов-меток, либо в виде частично-примененных функций в форме струтктурных термов

(функция выражение)

где функция - символ-метка или частично-примененная функция.

Примерами функций, передаваемых в функции высшего порядка являются:

&add
(&add (2))
(&xopen 'r')
(&xopen 'r' 0)
((&xopen 'r') 0)

Библиотека РефалАБ содержит следующие функции высшего порядка:

2.15. Функции, пустые функции и спецификаторы, специфичные для сред Windows и POSIX

В библиотеке есть функции и спецификаторы, специфичные для сред Windows и POSIX. Т.е. возвращаемые выражения этих функций и множества спецификаторов различны для сред Windows и POSIX. Они применяются для написания программ, по разному ведущих себя в средах Windows и POSIX.

Такими функциями являются:

Также есть пустые функции:

Специфичными спецификаторами являются:

2.16. Системные функции

В библиотеке РефалАБ присутствуют следующие системные функции:

Отдельно стоящей функцией является step - возвращает количество завершенных шагов процесса.

2.17. Функции для работы со случайными числами

В библиотеке РефалАБ присутствуют следующие функции для работы со случайными числами:

2.18. Пустые функции

В библиотеке РефалАБ также присутствуют следующие пустые функции:

2.19. Описание функций

Здесь представлены описания функций, расположенных в алфавитном порядке. Для каждой функции приводится формат вызова (передаваемые аргументы), описание, возвращаемое значение и пример вызова функции в формате

<вызов функции> --> <результат замены>

Функция Abs

ВЫЗОВ:

<Abs E.n>

где E.n - целое число (может быть пустое).

ОПИСАНИЕ:

Функция Abs вычисляет модуль целого числа E.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции Abs является модуль целого числа E.n. Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<Abs 1> --> 1
<Abs '-' 1> --> 1

Функция add

ВЫЗОВ:

<add (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция add предназначена для сложения двух целых чисел E.E1 и E.E2.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции add является целое число (сложение E.E1 и E.E2). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<add (1) 2> --> 3
<add ( ) 2> --> 2
<add (4294967295) 2> --> 1 1

Функция addn

ВЫЗОВ:

<addn (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Отличается от add только тем, что выдает нулевой результат в виде пустого выражения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Как в add, только нулевой результат выдается в виде пустого выражения.

ПРИМЕР:

<addn () > -->

Функция And

ВЫЗОВ:

<And E.b>

где E.b - выражение (может быть пустое), состоящее из символов-меток &True, &False и таких структурных термов (E.e), что < E.e> является функцией, которая возвращает выражение, аналогичное E.b.

ОПИСАНИЕ:

Функция And выполняет логическую операцию И. Функция последовтельно на нулевом уровне E.b проходит &True. Если на нулевом уровне встречается структурный терм (E.e), то (E.e) заменяется на результат функции < E.e>. Как только встречается &False, функция игнорирует оставшуюся часть E.b, возвращая &False. Дойдя до конца E.b, функция возвращает &True.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<And > --> &True
<And &True> --> &True
<And &False &True> --> &False
<And (&Is_Type &Void)> --> &True

Функция Append_FBytes

ВЫЗОВ:

<Append_FBytes S.n (E.f) E.b>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX; E.b - выражение (может быть пустым), которое содержит только символы-литеры и макроцифры.

ОПИСАНИЕ:

Эта функция открывает файл на дозапись в уже существующий файл. Если файл не существует, то файл будет создан, и в него будет осуществляться обычная запись с самого начала. Далее функция записывает в конец файла байты E.b. При этом все символы-литеры в выражении E.b преобразуются в ихние 8-битные коды от 0 до , а макроцифры в выражении E.b преобразуются по модулю 256 в числа от 0 до . В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<Append_FBytes 3 ('input.bin') 'n' 89> -->
и в конец файла допишутся байты 110 и 89

Файл 'input.bin' не может быть открыт
<Append_FBytes 3 ('input.bin') 'n' 89> -->  'описание кода ошибки' &NULL

Функция Append_File

ВЫЗОВ:

<Append_File S.n (E.f) E.l>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX; E.l - выражение (может быть пустым) вида (E.l1)…(E.ln), E.l1…E.ln содержат только символы-литеры.

ОПИСАНИЕ:

Эта функция открывает файл на дозапись в уже существующий файл. Если файл не существует, то файл будет создан, и в него будет осуществляться обычная запись с самого начала. Далее функция записывает в конец файла строки E.l1…E.ln. Ели любое из этих выражений пусто, в файл добавляется пустая строка. Если E.l - пусто, то в файл ничего не записывается. В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<Append_File 3 ('input.txt') ('next string') ('last string')> -->
и в конец файла допишутся строки 'next string' и 'last string'

Файл 'input.txt' не может быть открыт
<Append_File 3 ('input.txt') ('next string') ('last string')> -->  'описание кода ошибки' &NULL

Функция Apply

ВЫЗОВ:

<Apply W.c E.e>

где W.c - терм, являющийся функцией, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция высшего порядка вызывает функцию, т.е. применяет функцию W.c к аргументу функции E.e. Если W.c - символ-метка, то функция вызывается так < W.c E.e>. Если W.c - частично-примененная функция (W.p E.b), то происходит применение функции W.p к аргументу E.b E.e.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение, являющееся результатом применения функции W.c к аргументу функции E.e.

ПРИМЕРЫ:

<Apply &add (2) 1> --> 3
<Apply (&add (2)) 1> --> 3

Функция arg

ВЫЗОВ:

<arg N.n>

где N.n - макроцифра.

ОПИСАНИЕ:

Функция arg возвращает аргумент командной строки с номером N.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение из объектных символов, представляющее аргумент с номером N.n командной строки. Нумерация аргументов идет с единицы. Если N.n = 0, то аргумент есть имя программы. Если N.n больше количества аргументов, то E.r - пустое выражение.

ПРИМЕРЫ:

Запуск рефал-программы из командной строки Windows: test -d
<arg 0> --> 'test.exe'
<arg 1> --> '-d'
<arg 2> -->

Запуск рефал-программы из терминала в среде POSIX: ./test -d
<arg 0> --> './test'
<arg 1> --> '-d'
<arg 2> -->

Функция ArgList

ВЫЗОВ:

<ArgList>

ОПИСАНИЕ:

Функция ArgList возвращает все аргументы командной строки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.a

где E.a - выражение (V.a1)…(V.an), где V.ai, i=1…n - выражение из объектных символов, представляющее аргумент с номером i командной строки, n - количество таких аргументов. Если аргументов нет, то E.a - пусто.

ПРИМЕРЫ:

Запуск рефал-программы test
<ArgList > -->

Запуск рефал-программы test -d -i
<ArgList > --> ('-d') ('-i')

Функция band

ВЫЗОВ:

<band (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция band вычисляет целое число - побитовое И двух целых чисел E.E1 и E.E2. Побитовое И выполняется над макроцифрами двух чисел попарно справа налево. Недостаюшие макроцифры для пар, если длина чисел в макроцифрах разная, считаются равными нулю. Знак результирующего числа есть логическое И над знаками двух чисел (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции band является целое число (побитовое И E.E1 и E.E2). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<band (1) '-' 3> --> 1
<band ('-' 1  2) '-' 7> --> '-' 2
<band (2 1) 2> --> 0

Функция bnot

ВЫЗОВ:

<bnot E.n>

где E.n - целое число (может быть пустое).

ОПИСАНИЕ:

Функция bnot вычисляет целое число - побитовое отрицание целого числа E.n. Побитовое отрицание выполняется над макроцифрами числа E.n справа налево. Знак результирующего числа есть логическое отрицание над знаком числа E.n (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции bnot является целое число (побитовое отрицание E.n). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<bnot '-' 3> --> 4294967292
<bnot 4294967295 4294967292> --> '-' 3
<bnot 0> --> '-' 4294967295

Функция bor

ВЫЗОВ:

<bor (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция bor вычисляет целое число - побитовое ИЛИ двух целых чисел E.E1 и E.E2. Побитовое ИЛИ выполняется над макроцифрами двух чисел попарно справа налево. Недостаюшие макроцифры для пар, если длина чисел в макроцифрах разная, считаются равными нулю. Знак результирующего числа есть логическое ИЛИ над знаками двух чисел (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции bor является целое число (побитовое ИЛИ E.E1 и E.E2). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<bor (1) '-' 2> --> '-' 3
<bor ('-' 1  2) '-' 7> --> '-' 1 7
<bor (2 1) 2> --> 2 3

Функция bxor

ВЫЗОВ:

<bxor (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция bxor вычисляет целое число - побитовое исключающее ИЛИ двух целых чисел E.E1 и E.E2. Побитовое исключающее ИЛИ выполняется над макроцифрами двух чисел попарно справа налево. Недостаюшие макроцифры для пар, если длина чисел в макроцифрах разная, считаются равными нулю. Знак результирующего числа есть логическое исключающее ИЛИ над знаками двух чисел (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции bxor является целое число (побитовое исключающее ИЛИ E.E1 и E.E2). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<bxor (1) '-' 2> --> '-' 3
<bxor ('-' 1  2) '-' 7> --> 1 5
<bxor (1 2) 1 2> --> 0

Функция card

ВЫЗОВ:

<card E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция card дает возможность читать записи из стандартного входного потока. Обычно в качестве входного потока назначается ввод с клавиатуры, но он может быть переназначен в файл при запуске программы (в этом случае необходимо следить за соответствием количества вызовов функции card и количества записей в файле, если записей меньше, чем вызовов, возможны непредсказуемые результаты).

Если E.e не пусто, то в начале работы функция выводит выражение E.e в стандартный выходной поток, как-будто она вызывает функцию

<wrouts E.e>

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

После вызова функции card программа переходит в состояние ожидания ввода строки. По окончании ввода (нажатии клавиши “Enter”) введенная строка и будет возвращаемым значением. Если в процессе ввода функция обнаружила в потоке EOF, то функция завершает работу и последний символ в возвращаемом выражении будет макроцифра 0.

ПРИМЕР:

<card > --> 'эта строка введена с клавиатуры'

Функция change_dir

ВЫЗОВ:

<change_dir E.d>

где E.d - выражение из символов-литер, задаюшее имя директории (возможно, с указанием пути), не превышающее 4096 символов.

ОПИСАНИЕ:

Изменяет текущий рабочий каталог на E.d.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение из символов-литер:

ПРИМЕРЫ:

<change_dir 'test'> -->
<change_dir 'd:\\test\\a'> -->
<change_dir 'test/a'> -->

Процесс изменения текущего рабочего каталога завершился с ошибкой 
<change_dir 'a.a'> --> 'описание кода ошибки'

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция chartof

ВЫЗОВ:

<chartof V.c>

где V.c - непустая цепочка объектных символов.

ОПИСАНИЕ:

Функция chartof превращает цепочку литер в символ-метку, имеющий имя, совпадающее с заданной цепочкой литер. Цепочка литер обязанна быть непустой, количество литер не превышать 255, литеры могут быть любыми. Функция chartof создает и поддерживает таблицу символов-меток, порожденных ею из цепочек литер. Если цепочка литер встретилась в первый раз, то создается пустая функция, имя которой является соответствующим символом-меткой. Если такая же цепочка литер встречается еще раз, то новая функция не создается, а в качестве результата вырабатывается имя ранее созданной функции.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: символ-метка

ПРИМЕРЫ:

<chartof '$assA3434^&'> --> &$ASSA3434^&
<chartof 'ABCD'> --> &ABCD

Функция chr

ВЫЗОВ:

<chr E.n>

где E.n - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция заменяет в выражении E.n все макроцифры символами-литерами с соответствующим 8-битным кодом (по модулю 256).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.c

где E.c - выражение E.n, в котором все макроцифры заменены символами-литерами.

ПРИМЕР:

<chr 318 'h' ('j') (65)> --> '>' 'h' ('j') ('A')

Функция Cvb

ВЫЗОВ:

<Cvb E.d>

где E.d - цепочка символов-литер произвольной длины, являющаяся десятичной записью целого числа со знаком или без него. Пустое выражение эквивалентно нулю.

ОПИСАНИЕ:

Преобразует целое число E.d из символьного представления в цепочку макроцифр (возможно со знаком).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.n

где V.n - число в виде цепочки макроцифр. Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<Cvb > --> 0
<Cvb '+025'> --> 25
<Cvb '1000000000'> --> 1000000000

Функция Cvd

ВЫЗОВ:

<Cvd E.n>

где E.n - целое число в виде цепочки макроцифр (возможно, со знаком) (может быть пустое).

ОПИСАНИЕ:

Преобразует целое число в символьное представление.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.d

где V.d - цепочка символов-литер, являющаяся записью числа E.n в десятичной системе счисления. Если число E.n положительно - знак ‘+’ в E.d не ставитcя. Нулевой результат изображается как ‘0’.

ПРИМЕРЫ:

<Cvd '-' 1000000000> --> '-1000000000'
<Cvd > --> '0'
<Cvd 0> --> '0'

Функция Dec

ВЫЗОВ:

<Dec E.N>

где E.N - целое число (может быть пустое).

ОПИСАНИЕ:

Функция Dec производит вычитание единицы из целого числа E.N.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции Dec является целое число (вычитание из E.N единицы). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<Dec '+' 1> --> 0
<Dec > --> '-' 1
<Dec '-' 4294967295> --> '-' 1 0

Функция Del_FirstW

ВЫЗОВ:

<Del_FirstW W.w E.e>

где W.w - терм, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Del_FirstW удаляет первый терм нулевого уровня W.w аргумента W.wE.e.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕРЫ:

<Del_FirstW (1)> -->
<Del_FirstW (1 6) (1) (3)> --> (1) (3)

Функция Del_LastW

ВЫЗОВ:

<Del_LastW E.e W.w>

где E.e - произвольное объектное выражение, W.w - терм.

ОПИСАНИЕ:

Функция Del_LastW удаляет последний терм нулевого уровня W.w аргумента E.eW.w.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕРЫ:

<Del_LastW (1)> -->
<Del_LastW (1 6) (1) (3)> --> (1 6) (1)

Функция delf

ВЫЗОВ:

<delf>

ОПИСАНИЕ:

Функция delf изменяет поле зрения, удаляя из него функциональные термы, находящиеся в определенной цепочке, являющаяся частью последовательности становления ведущими функциональных термов. Начало цепочки - функциональный терм, который станет ведущим после ведущего функционального терма, т.е. после вызова функции delf. Конец цепочки - функциональный терм, за которым следует сразу символ ‘#’. Также удаляется символ ‘#’. Если функция не находит символ ‘#’, происходит аварийное завершение программы с выдачой сообщения “sign ‘#’ missing”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕРЫ:

поле зрения: 'Hello World!'<DELF><PRINT'delf1'><PRINT'delf2'>'#'<PRINT'delf'>
<delf> -->
поле зрения: 'Hello World!'<PRINT'delf'>

поле зрения: 'Hello World!'<DELF><PRINT'delf1'<PRINT'delf2'>'ok'<PRINT'delf3'>'#delf'>
<delf> -->
поле зрения: 'Hello World!'<PRINT'delf1okdelf'>

Функция Directory_Separator

ВЫЗОВ:

<Directory_Separator>

ОПИСАНИЕ:

Функция Directory_Separator возвращает основной символ для разделения уровней папок в строке пути в текущей среде.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.d

где S.d - символ-литера:

ПРИМЕРЫ:

Среда Windows
<Directory_Separator> --> '\\'

Среда POSIX
<Directory_Separator> --> '/'

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция div

ВЫЗОВ:

<div (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция div предназначена для целочисленного деления числа E.E1 на число E.E2. Попытка делить на ноль приводит к авосту “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Целое число, представляющее собой неокругленное частное от деления E.E1 на E.E2. Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<div (5) 3> --> 1
<div (5) '-' 3> --> '-' 1
<div ('-' 5) 3> --> '-' 1
<div ('-' 5) '-' 3> --> 1

Функция divn

ВЫЗОВ:

<divn (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Отличается от div только тем, что выдает нулевой результат в виде пустого выражения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Как в div, только нулевой результат выдается в виде пустого выражения.

ПРИМЕР:

<divn () 3> -->

Функция dr

ВЫЗОВ:

<dr (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция dr предназначена для целочисленного деления с остатком числа E.E1 на число E.E2. Попытка делить на ноль приводит к авосту “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.q (E.r)

где E.q (целое число) - частное от деления E.E1 на E.E2 , а E.r (целое число) - остаток. И частное, и остаток выдаются без незначащих нулей и без знака ‘+’. Нулевые E.q и E.r выдаются в виде макроцифры 0. Знаки чисел учитываются следующим образом: сначала производим деление, не обращая внимания на знаки, а затем частному и остатку приписываем такие знаки, чтобы выполнялось соотношение:

E.E1 = E.q * E.E2 + E.r

т.е. частное положительно, если знаки делимого и делителя совпадают, и отрицательно в противном случае, а не равный нулю остаток всегда имеет знак делимого.

ПРИМЕРЫ:

<dr (5) 3> --> 1 (2)
<dr (5) '-' 3> --> '-' 1 (2)
<dr ('-' 5) 3> --> '-' 1 ('-' 2)
<dr ('-' 5) '-' 3> --> 1 ('-' 2)

Функция drn

ВЫЗОВ:

<drn (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Отличается от dr только тем, что выдает нулевой результат в виде пустого выражения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Как в dr, только нулевой результат выдается в виде пустого выражения.

ПРИМЕРЫ:

<drn (10) 5> --> 2 ()
<drn () 3> --> ()

Функция Empty

ВЫЗОВ:

<Empty E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Empty возвращает пустое выражение.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕРЫ:

<Empty > -->
<Empty 'd' 0 ()> -->

Функция EQL

ВЫЗОВ:

<EQL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция EQL выполняет лексикографическую операцию ‘равно’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<EQL ('a') 'a'> --> &True
<EQL ('b') 'a'> --> &False
<EQL ('a') 'b'> --> &False

Функция EQN

ВЫЗОВ:

<EQN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция EQN выполняет операцию ‘равно’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<EQN () > --> &True
<EQN (5) 3> --> &False
<EQN (3) 5> --> &False

Функция Exist

ВЫЗОВ:

<Exist W.s E.e>

где W.s - терм, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Exist проверяет, существует ли терм W.s в выражении E.e на нулевом уровне.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<Exist 's' 's'> --> &True
<Exist 's' 'r'> --> &False

Функция exist_dir

ВЫЗОВ:

<exist_dir E.d>

где E.d - выражение из символов-литер, задаюшее имя директории (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

ОПИСАНИЕ:

Функция проверяет, существует ли директория с именем E.d.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<exist_dir 'test'> --> &True
<exist_dir 'a.b'> --> &False
<exist_dir > --> &False

Функция exist_file

ВЫЗОВ:

<exist_file E.f>

где E.f - выражение из символов-литер, задаюшее имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

ОПИСАНИЕ:

Функция проверяет, существует ли файл с именем E.f.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

В папке находится файл "a.a"
<exist_file 'a.a'> --> &True

В папке не находится файл "a.b"
<exist_file 'a.b'> --> &False

<exist_file > --> &False

Функция exit

ВЫЗОВ:

<exit V.n>

где V.n - целое число в виде одной макроцифры (возможно, со знаком) в диапазоне от -2147483648 до 2147483647.

ОПИСАНИЕ:

Функция exit заврешает программу с кодом состояния завершения V.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕРЫ:

<exit 0> -->
<exit 1> -->
<exit '-' 1> -->

Функция fclose

ВЫЗОВ:

<fclose S.n>

где S.n - номер файла (макроцифра от 0 до 9).

ОПИСАНИЕ:

Эта функция закрывает файл с заданным номером.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<fclose 3> -->

Закрытие файла завершилось с ошибкой 
<fclose 3> --> 'описание кода ошибки'

Файл не открыт
<fclose 3> --> &NULL

Функция fgets

ВЫЗОВ:

<fgets S.n>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный входной поток (символ-метка &StdIn).

ОПИСАНИЕ:

Функция fgets читает очередную строку, начиная с текущей позиции, из предварительно открытого файла с помощью функции fopen с заданным номером или стандартного входного потока.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - очередная строка из файла или стандартного входного потока в виде выражения объектных символов. Если в процессе чтения строки функция обнаружила EOF или ошибку в файле, то функция завершает работу и последний символ в возвращаемом выражении будет символ-метка &FEOF (если конец файла) или &FError (если ошибки в файле). Если файл не открыт, то E.r = &NULL.

ПРИМЕРЫ:

<fgets 3> --> 'это очередная прочитанная строка'
<fgets 3> --> 'это следующая строка из того же файла'
<fgets 3> --> &FEOF

Файл не открыт
<fgets 3> --> &NULL

Функция first

ВЫЗОВ:

<first N.n E.e>

где N.n - макроцифра, а E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция предназначена для отщепления от начала выражения E.e части, имеющей указанную длину N.n в термах нулевого уровня.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Если E.e представляет собой последовательность из менее, чем Nn термов, результатом замены является выражение:

'*' E.e

Если же длина E.e не меньше, чем N.n термов, результатом замены является

(E.e1) E.e2

где E.e1 и E.e2 - такие выражения, что E.e = E.e1 E.e2, и при этом E.e1 является последовательностью ровно из N.n термов.

ПРИМЕРЫ:

<first 2 'A'('B')'C'> --> ('A'('B')) 'C'
<first 5 'A'('B')'C'> --> '*A'('B')'C'

Функция FoldL

ВЫЗОВ:

<FoldL W.c W.a E.e>

где W.c - терм, являющийся функцией, W.a - терм, являющийся начальным значением аккумулятора, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция высшего порядка производит левую свертку, т.е., если E.e не пусто, последовательно применяет функцию W.c к терму, являющимся текущим значением аккумулятора, начиная с начального, и к текущему терму нулевого уровня выражения E.e, начиная с первого. Результат этого применения - терм W.wi, i=1…n (n - количество термов нулевого уровня выражения E.e), который становится новым текущим значением аккумулятора. Результат функции - W.wn.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.r

где W.r - терм:

ПРИМЕРЫ:

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>)
<FoldL &Add1 (1)> --> (1)

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>)
<FoldL &Add1 (1) (2) (1 3)> --> (1 6)

Функция FoldR

ВЫЗОВ:

<FoldR W.c E.e W.a>

где W.c - терм, являющийся функцией, E.e - произвольное объектное выражение, W.a - терм, являющийся начальным значением аккумулятора.

ОПИСАНИЕ:

Эта функция высшего порядка производит правую свертку, т.е., если E.e не пусто, последовательно применяет функцию W.c к текущему терму нулевого уровня выражения E.e, начиная с последнего в обратном порядке, и к терму, являющимся текущим значением аккумулятора, начиная с начального. Результат этого применения - терм W.wi, i=1…n (n - количество термов нулевого уровня выражения E.e), который становится новым текущим значением аккумулятора. Результат функции - W.wn.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.r

где W.r - терм:

ПРИМЕРЫ:

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>)
<FoldR &Add1 (1)> --> (1)

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>)
<FoldR &Add1 (2) (1 3) (1)> --> (1 6)

Функция fopen

ВЫЗОВ:

<fopen S.z S.n E.b E.f>

где S.z - символ-литера, S.n - номер файла (макроцифра от 0 до 9), E.b - символ-литера (воможно пусто), E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

Если S.z - ‘R’ или ‘r’, то файл открывается на чтение.

Если S.z - ‘W’ или ‘w’, то файл открывается на запись. Если файл существует, то файл будет перезаписан. Если файл не существует, то файл будет создан.

Если S.z - ‘A’ или ‘a’, то файл открывается на дозапись в уже существующий файл. Если файл не существует, то файл будет создан, и в него будет осуществляться обычная запись с самого начала.

Если E.b - пусто, то файл открывается в текстовом режиме.

Если E.b = ‘B’ или ‘b’, то файл открывается в двоичном режиме.

ОПИСАНИЕ:

Эта функция открывает файл на чтение или на запись (или дозапись) и связывает с ним заданный номер.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение из символов-литер:

ПРИМЕРЫ:

<fopen 'r'3'input.txt'> -->
<fopen 'a'0'c:\\refal\\examples\\test.txt'> -->
<fopen 'a'0'examples/test.txt'> -->

Открытие файла 'input.txt' завершилось с ошибкой 
<fopen 'r'3'input.txt'> --> 'описание кода ошибки'

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция fprint

ВЫЗОВ:

<fprint S.n E.e>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr), а E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция fprint записывает в файл с заданным номером (предварительно открытый с помощью функции fopen), начиная с текущей позиции, или стандартный выходной поток или стандартный поток вывода ошибки выражение E.e без перехода на новую строку. При использовании функции fprint выражение E.e записывается следующим образом. Символы-литеры (объектные знаки) выводятся в виде соответствующих литер. Структурные скобки “(“ и “)” выводятся в виде литер “(“ и “)”. Составные символы печатаются в том же виде, как они изображаются в РефалАБ-программах, за исключением того, что в качестве ограничителей для символов-ссылок и нестандартных символов используется не “/”, а апостроф “’”. Символы-числа обрамляются апострофами “’”. Символы-метки выводятся в виде имени символа-метки, обрамленного апострофами “’”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение:

ПРИМЕРЫ:

<fprint 0 'function' (&f1)> -->
и в файл запишется строка 'function('F1')'

Файл не открыт
<fprint 0 'function' (&f1)> --> &NULL

Функция fprintm

ВЫЗОВ:

<fprintm S.n E.e>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr), а E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции fprint. Только при использовании функции fprintm выражение записывается в том же виде, в котором оно записывается в исходных РефалАБ-программах. Единственное различие заключается в том, что при переходе на следующую строку не ставится признак продолжения “+”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение:

ПРИМЕРЫ:

<fprintm 0 'function' (&f1)> -->
и в файл запишется строка ''function'(&F1)'

Файл не открыт
<fprintm 0 'function' (&f1)> --> &NULL

Функция fprints

ВЫЗОВ:

<fprints S.n E.e>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr), а E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции fprint. Только при использовании функции fprints символы выражения не обрамляются апострофами.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение:

ПРИМЕРЫ:

<fprint 0 'function' (&f1)> -->
и в файл запишется строка 'function(F1)'

Файл не открыт
<fprint 0 'function' (&f1)> --> &NULL

Функция fputs

ВЫЗОВ:

<fputs S.n E.e>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr), а E.e - выражение, которое содержит только символы-литеры.

ОПИСАНИЕ:

Функция fputs записывает в файл с заданным номером (предварительно открытый с помощью функции fopen), начиная с текущей позиции, или стандартный выходной поток или стандартный поток вывода ошибки очередную строку E.e без перехода на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение:

ПРИМЕРЫ:

<fputs 0 'next string'> -->
и в файл запишется строка 'next string'

Файл не открыт
<fputs 0 'next string'> --> &NULL

Функция fread

ВЫЗОВ:

<fread S.n S.c>

где S.n - номер файла (макроцифра от 0 до 9), S.c - макроцифра.

ОПИСАНИЕ:

Функция fread читает очередные байты (максимальное количество S.c), начиная с текущей позиции, из предварительно открытого с помощью функции fopen файла с заданным номером.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - очередные байты из “файла чтения” (максимальное количество S.c) в виде выражения макроцифр. Если в процессе чтения байт функция обнаружила EOF или ошибку в файле, то функция завершает работу и последний символ в возвращаемом выражении будет символ-метка &FEOF (если конец файла) или &FError (если ошибки в файле). Если файл не открыт, то E.r = &NULL.

ПРИМЕРЫ:

<fread 3 3> --> очередные три байта
<fread 3 3> --> это очередные три байта из того же файла
<fread 3 3> --> &FEOF

Файл не открыт
<fread 3 3> --> &NULL

Функция fseek

ВЫЗОВ:

<fseek S.n V.n S.f>

где S.n - номер файла (макроцифра от 0 до 9), V.n - целое число в виде одной макроцифры (возможно, со знаком) в диапазоне от -2147483648 до 2147483647, S.f - символ-метка, определяющая начальную позицию.

Если S.f = &Begin, то начальная позиция - начало файла.

Если S.f = &End, то начальная позиция - конец файла.

Если S.f = &Cur, то начальная позиция - текущая позиция файлового указателя.

ОПИСАНИЕ:

Эта функция перемещает файловый указатель на определенное количество байт V.n, начиная с позиции S.f.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<fseek 3 5 &Begin> -->

Перемещение указателя завершилось с ошибкой 
<fseek 3 '-' 5 &Begin> --> 'описание кода ошибки'

Файл не открыт
<fseek 3 5 &Begin> --> &NULL

Функция ftell

ВЫЗОВ:

<ftell S.n>

где S.n - номер файла (макроцифра от 0 до 9).

ОПИСАНИЕ:

Эта функция возвращает текущее положение указателя файла.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.e

где V.e - выражение:

ПРИМЕРЫ:

<ftell 3> --> 0

Возвращение текущего положения указателя файла завершилось с ошибкой 
<ftell 3> --> 'описание кода ошибки'

Файл не открыт
<ftell 3> --> &NULL

Функция ftochar

ВЫЗОВ:

<ftochar F.x>

где F.x - символ-метка.

ОПИСАНИЕ:

Эта функция превращает символ-метку в цепочку объектных символов, которая является именем символа-метки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом замены является цепочка объектных символов, являющаяся именем символа F.x.

ПРИМЕРЫ:

<ftochar &assa3434> --> 'ASSA3434'
<ftochar &ABCD> --> 'ABCD'

Функция functab

ВЫЗОВ:

<functab F.x>

где F.x - символ-метка.

ОПИСАНИЕ:

В некоторых случаях требуется, чтобы символ-метка, создаваемый из некоторой цепочки литер заведомо совпадал с символом-меткой, определенным в РефалАБ-программе и имеющим имя, полностью совпадающее с данной цепочкой литер. Это достигается с помощью функции functab, которая регистрирует в таблице символов, создаваемой функцией chartof, указанный символ-метку F.x. После этого, всякий раз, когда функция chartof будет получать цепочку литер, совпадающую с именем символа F.x, результатом функции chartof будет символ F.x.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

Пусть в РефалАБ-программе определена некоторая функция func1. Тогда

<functab &func1> -->

и в таблице символов функции chartof окажется зарегистрированным символ-метка &FUNC1.

Функция fwrite

ВЫЗОВ:

<fwrite S.n E.b>

где S.n - номер файла (макроцифра от 0 до 9), а E.b - выражение (может быть пустым), которое содержит только символы-литеры и макроцифры.

ОПИСАНИЕ:

Функция fwrite записывает в файл с заданным номером (предварительно открытый с помощью функции fopen), начиная с текущей позиции, очередные байты E.b. При этом все символы-литеры в выражении E.b преобразуются в ихние 8-битные коды от 0 до 255, а макроцифры в выражении E.b преобразуются по модулю 256 в числа от 0 до 255.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение:

ПРИМЕР:

<fwrite 0 'n' 89> -->
и в файл запишутся байты 110 и 89

Файл не открыт
<fwrite 0 'n' 89> --> &NULL

Функция gcd

ВЫЗОВ:

<gcd (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция gcd предназначена для вычисления наибольшего общего делителя двух целых чисел E.E1 и E.E2. Если E.E1 и E.E2 равны нулю, возникает авост “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции gcd является положительное целое число (знак ‘+’ не ставитcя), которое является наибольшим общим делителем чисел E.E1 и E.E2.

ПРИМЕРЫ:

<gcd (6) 15> --> 3
<gcd ('-' 6) 15> --> 3
<gcd (15) 1> --> 1
<gcd (15) 0> --> 15
<gcd (15) > --> 15

Функция GEL

ВЫЗОВ:

<GEL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция GEL выполняет лексикографическую операцию ‘больше или равно’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<GEN ('b') 'a'> --> &True
<GEN ('a') 'b'> --> &False
<GEN ('a') 'a'> --> &True

Функция GEN

ВЫЗОВ:

<GEN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция GEN выполняет операцию ‘больше или равно’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<GEN (5) 3> --> &True
<GEN (3) 5> --> &False
<GEN () > --> &True

Функция get_current_dir

ВЫЗОВ:

<get_current_dir >

ОПИСАНИЕ:

Функция возвращает текущий рабочий каталог.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение из объектных символов, представляющее собой текущий рабочий каталог. Если невозможно получить текущий рабочий каталог, то E.r - пустое выражение.

ПРИМЕР:

<get_current_dir > --> 'текущий рабочий каталог'

Функция get_env

ВЫЗОВ:

<get_env E.c>

где E.c - цепочка объектных символов, представляющая имя переменной окружения, не превышающее 32767 символов.

ОПИСАНИЕ:

Функция get_env возвращает значение переменной окружения с заданным именем E.c.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.v

где E.v - значение переменной окружения с заданным именем E.c в виде цепочки объектных символов. Если переменная окружения не установлена, E.v - символ-метка &NULL.

ПРИМЕРЫ:

Среда Windows
<get_env> --> &NULL
<get_env 'path'> --> 'значение переменной окружения PATH'
<get_env 'PATH'> --> 'значение переменной окружения PATH'

Среда POSIX
<get_env> --> &NULL
<get_env 'path'> --> &NULL
<get_env 'PATH'> --> 'значение переменной окружения PATH'

Функция Get_Max_Number

ВЫЗОВ:

<Get_Max_Number>

ОПИСАНИЕ:

Функция Get_Max_Number возвращает максимальное значение макроцифры 4294967295.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Макроцифра 4294967295.

ПРИМЕР:

<Get_Max_Number> --> 4294967295

Функция Get_Max_PathFileName

ВЫЗОВ:

<Get_Max_PathFileName>

ОПИСАНИЕ:

Функция Get_Max_PathFileName возвращает максимальную длину имени файла (возможно, с указанием пути) в текущей среде.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.n

где S.n - макроцифра:

ПРИМЕРЫ:

Среда Windows
<Get_Max_PathFileName> --> 260

Среда POSIX
<Get_Max_PathFileName> --> 4096

Функция GTL

ВЫЗОВ:

<GTL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция GTL выполняет лексикографическую операцию ‘больше’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<GTL ('b') 'a'> --> &True
<GTL ('a') 'b'> --> &False
<GTL ('a') 'a'> --> &False

Функция GTN

ВЫЗОВ:

<GTN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция GTN выполняет операцию ‘больше’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<GTN (5) 3> --> &True
<GTN (3) 5> --> &False
<GTN () > --> &False

Функция If

ВЫЗОВ:

<If V.c (E.f)>

где V.c - выражение (W.b1 E.e1)…(W.bn E.en), E.f - произвольное объектное выражение.

W.bi, i=1…n - символ-метка &True или &False или такой структурный терм (E.e), что < E.e> является функцией, которая возвращает символ-метку &True или &False.

E.ei, i=1…n - произвольное объектное выражение.

ОПИСАНИЕ:

Функция If является условным оператором. Функция последовтельно на нулевом уровне V.c проходит структурные термы (W.bi E.ei), i=1…n. Если W.bi = &False, то функция идет к следующему структурному терму. Если W.bi = &True, то функция игнорирует оставшуюся часть V.c и E.f и запускает процедуру возвращения выражения E.ei. Если W.bi = (E.e), то (E.e) заменяется на результат функции < E.e> и анализируется измененное W.bi. Дойдя до конца V.c, функция запускает процедуру возвращения выражения E.f.

Процедура возвращения выражения E.g заключается в следующем. Если E.g = (&Call E.g1), то функция возвращает результат функции < E.g1>, иначе функция возвращает выражение E.g.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение, которое функция возвращает в результате процедуры возвращения произвольного объектного выражения.

ПРИМЕРЫ:

<If (&True 'g') ()> --> 'g'
<If (&False 'g') ('f')> --> 'f'
<If ((&Is_Type &Void) 'g') ('f')> --> 'g'

Функция Inc

ВЫЗОВ:

<Inc E.N>

где E.N - целое число (может быть пустое).

ОПИСАНИЕ:

Функция Inc производит прибавление единицы к целому числу E.N.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции Inc является целое число (сложение E.N и 1). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<Inc '-' 1> --> 0
<Inc > --> 1
<Inc 4294967295> --> 1 0

Функция Is_Directory_Separator

ВЫЗОВ:

<Is_Directory_Separator S.d>

где S.d - произвольный символ.

ОПИСАНИЕ:

Функция Is_Directory_Separator определяет принадлежность символа к символам для разделения уровней папок в строке пути в текущей среде. Символы для разделения уровней папок в строке пути:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

Среда Windows
<Is_Directory_Separator '\\'> --> &True
<Is_Directory_Separator '/'> --> &True
<Is_Directory_Separator ';'> --> &False

Среда POSIX
<Is_Directory_Separator '/'> --> &True
<Is_Directory_Separator '\\'> --> &False

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция is_eof

ВЫЗОВ:

<is_eof S.n>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный входной поток (символ-метка &StdIn) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr).

ОПИСАНИЕ:

Функция is_eof проверяет окончание файла S.n или наличие ошибок в файле.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<is_eof 0> --> &False
<is_eof 0> --> &True

Файл не открыт
<is_eof 0> --> &NULL

Функция is_feof

ВЫЗОВ:

<is_feof S.n>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный входной поток (символ-метка &StdIn) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr).

ОПИСАНИЕ:

Функция is_feof проверяет окончание файла S.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<is_feof 0> --> &False
<is_feof 0> --> &True

Файл не открыт
<is_feof 0> --> &NULL

Функция is_ferror

ВЫЗОВ:

<is_ferror S.n>

где S.n - номер файла (макроцифра от 0 до 9) или стандартный входной поток (символ-метка &StdIn) или стандартный выходной поток (символ-метка &StdOut) или стандартный поток вывода ошибки (символ-метка &StdErr).

ОПИСАНИЕ:

Функция is_ferror проверяет наличие ошибок в файле S.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<is_ferror 0> --> &False
<is_ferror 0> --> &True

Файл не открыт
<is_ferror 0> --> &NULL

Функция Is_Max_Number

ВЫЗОВ:

<Is_Max_Number S.n>

где S.n - произвольный символ.

ОПИСАНИЕ:

Функция Is_Max_Number проверяет, является ли S.n максимальным значением макроцифры 4294967295.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<Is_Max_Number 4294967295> --> &True
<Is_Max_Number 4> --> &False

Функция Is_Max_PathFileName

ВЫЗОВ:

<Is_Max_PathFileName S.n>

где S.n - произвольный символ.

ОПИСАНИЕ:

Функция Is_Max_PathFileName проверяет, является ли S.n максимальной длиной имени файла (возможно, с указанием пути) в текущей среде.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

Среда Windows
<Is_Max_PathFileName 260> --> &True
<Is_Max_PathFileName 4096> --> &False

Среда POSIX
<Is_Max_PathFileName 4096> --> &True
<Is_Max_PathFileName 260> --> &False

Функция Is_Type

ВЫЗОВ:

<Is_Type S.t E.e>

где S.t - символ-метка, определяющая тип или подтип выражения E.e;

E.e - произвольное объектное выражение.

Если S.t = &Void, то тип выражения - Void.

Если S.t = &Label, то тип выражения - Label.

Если S.t = &Number, то тип выражения - Number.

Если S.t = &Reference, то тип выражения - Reference.

Если S.t = &Char, то тип выражения - Char.

Если S.t = &Brackets, то тип выражения - Brackets.

Если S.t = &OtherT, то тип выражения - OtherT.

Если E.s = &Latin, то подтип выражения - Latin.

Если E.s = &Digit, то подтип выражения - Digit.

ОПИСАНИЕ:

Функция Is_Type определяет принадлежность выражения E.e к указанному типу или подтипу S.t. Тип выражения зависит от терма, с которого начинается выражение E.e. Типы выражения могут быть:

Если выражениие E.e начинается с символа-литеры, то выражение также может иметь один из двух подтипов:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.p

где S.p - символ-метка:

ПРИМЕРЫ:

<Is_Type &Void > --> &True
<Is_Type &Void '9'> --> &False
<Is_Type &Number 9> --> &True
<Is_Type &Number '9'> --> &False
<Is_Type &Char '9'> --> &True
<Is_Type &Char 9> --> &False

Функция Is_White_Space

ВЫЗОВ:

<Is_White_Space S.w>

где S.w - произвольный символ.

ОПИСАНИЕ:

Функция Is_White_Space проверяет, является ли S.w пробелом. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<Is_White_Space '\t'> --> &True
<Is_White_Space 'r'> --> &False

Функция last

ВЫЗОВ:

<last N.n E.e>

где N.n - макроцифра, E.e - произвольное выражение.

ОПИСАНИЕ:

Эта функция предназначена для отщепления от конца выражения E.e части, имеющей указанную длину N.n в термах нулевого уровня.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Если E.e представляет собой последовательность из менее, чем N.n термов, результатом замены является

E.e '*'

Если же длина E.e составляет не менее, чем N.n термов, результатом замены является

E.e1 (E.e2)

где E.e1 и E.e2 - такие выражения, что E.e = E.e1 E.e2 и при этом E.e2 является последовательностью ровно из N.n термов.

ПРИМЕРЫ:

<last 2 'A'('B')'C'> --> 'A'(('B')'C')
<last 5 'A'('B')'C'> --> 'A'('B')'C*'

Функция LEL

ВЫЗОВ:

<LEL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция LEL выполняет лексикографическую операцию ‘меньше или равно’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<LEL ('a') 'b'> --> &True
<LEL ('b') 'a'> --> &False
<LEL ('a') 'a'> --> &True

Функция LEN

ВЫЗОВ:

<LEN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция LEN выполняет операцию ‘меньше или равно’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<LEN (3) 5> --> &True
<LEN (5) 3> --> &False
<LEN () > --> &True

Функция lengr

ВЫЗОВ:

<lengr E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция предназначена для вычисления длины аргумента, т.е. количества символов и скобок, составляющих E.e. При достижениии длины 4294967295, длина обнуляется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: N.n E.e

где N.n - макроцифра, значение которой равно длине выражения E.e.

ПРИМЕР:

<lengr 'A' () ('A')> --> 6 'A' () ('A')

Функции lengw

ВЫЗОВ:

<lengw E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция lengw выдает длину выражения, измеренную в термах, т.е. количество термов нулевого уровня, составляющих E.e. При достижениии длины 4294967295, длина обнуляется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: N.n E.e

где N.n - макроцифра, которая равна длине выражения E.e.

ПРИМЕРЫ:

<lengw 'A' () ('A')> --> 3 'A' () ('A')
<lengw > --> 0

Функция Load_FBytes

ВЫЗОВ:

<Load_FBytes S.n E.f>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

ОПИСАНИЕ:

Эта функция открывает файл на чтение в бинарном режиме. Далее функция читает все байты из открытого файла. В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.e

где V.e - выражение:

ПРИМЕРЫ:

<Load_FBytes 3 'input.bin'> --> байты &FEOF

Файл 'input.bin' не может быть открыт
<Load_FBytes 3 'input.bin'> -->  'описание кода ошибки' &NULL

Функция Load_File

ВЫЗОВ:

<Load_File S.n E.f>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

ОПИСАНИЕ:

Эта функция открывает файл на чтение. Далее функция читает все строки из открытого файла. В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.e

где V.e - выражение:

ПРИМЕРЫ:

<Load_File 3 'input.txt'> --> ('первая строка файла')...('последняя строка файла') &FEOF

Файл 'input.txt' не может быть открыт
<Load_File 3 'input.txt'> -->  'описание кода ошибки' &NULL

Функция lower

ВЫЗОВ:

<lower E.C>

где E.C - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция заменяет в выражении E.C все заглавные латинские символы-литеры строчными символами-литерами.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.n

где E.n - выражение E.C, в котором все заглавные латинские символы-литеры строчными символами-литерами.

ПРИМЕР:

<lower '>' 0 ('j') ('A')> --> '>' 0 ('j') ('a')

Функция lrel

ВЫЗОВ:

<lrel (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция lrel лексикографически сравнивает выражения E.E1 и E.E2.

В выраженииях E.E1 и E.E2 последовательно сравниваются термы нулевого уровня. Пусть на очередном шаге проверки W.W1 - терм выражения E.E1, W.W2 - терм выражения E.E2. Если W.W1 > W.W2, то E.E1 > E.E2. Если W.W1 < W.W2, то E.E1 < E.E2. Если W.W1 = W.W2, то происходит переход к следующим термам. Если в одном из выражений больше нет термов, то, если в другом выражении еще есть термы, то другое выражение больше, а если в обоих выражениях нет больше термов, то E.E1 = E.E2.

Правила сравнения двух термов:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.r

где S.r - символ-литера:

ПРИМЕРЫ:

<lrel ('ab') 'ab'> --> '='
<lrel ('ac') 'ab'> --> '>'
<lrel ('abc') 'ab'> --> '>'
<lrel ('a' 0) 'ab'> --> '>'
<lrel ('ab') 'a' ()> --> '<'
<lrel ('a' ('a')) 'a' ('b')> --> '<'
<lrel ('a' ('b')) 'a' ('b')> --> '='

Функция LTL

ВЫЗОВ:

<LTL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция LTL выполняет лексикографическую операцию ‘меньше’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<LTL ('a') 'b'> --> &True
<LTL ('b') 'a'> --> &False
<LTL ('a') 'a'> --> &False

Функция LTN

ВЫЗОВ:

<LTN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция LTN выполняет операцию ‘меньше’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<LTN (3) 5> --> &True
<LTN (5) 3> --> &False
<LTN () > --> &False

Функция m1

ВЫЗОВ:

<m1 N.n>

где N.n - макроцифра.

ОПИСАНИЕ:

Функция m1 производит вычитание единицы из макроцифры. Попытка вычесть единицу из макроцифры 0 приводит к авосту “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: макроцифра, на единицу меньшая N.n.

ПРИМЕРЫ:

<m1 10> --> 9
<m1 738> --> 737
<m1 1> --> 0

Функция Map

ВЫЗОВ:

<Map W.c E.e>

где W.c - терм, являющийся функцией, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция высшего порядка, если E.e не пусто, последовательно применяет функцию W.c к текущему терму нулевого уровня выражения E.e, начиная с первого. Результат применения - произвольное объектное выражение E.ei, i=1…n (n - количество термов нулевого уровня выражения E.e). Результат функции - выражение E.e1…E.en.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где Er - выражение:

ПРИМЕРЫ:

<Map (&add (2))> -->
<Map (&add (2)) 0 1> --> 2 3
<Map &lengr (1 2) 'r'> --> 4 (1 2) 1 'r'

Функция Map_Accumulator

ВЫЗОВ:

<Map_Accumulator W.c W.a E.e>

где W.c - терм, являющийся функцией, W.a - терм, являющийся начальным значением аккумулятора, E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция высшего порядка является гибридом функций Map и FoldL. Она, если E.e не пусто, последовательно применяет функцию W.c к терму, являющимся текущим значением аккумулятора, начиная с начального, и к текущему терму нулевого уровня выражения E.e, начиная с первого. Результат этого применения - выражение W.wi E.ei, i=1…n (n - количество термов нулевого уровня выражения E.e), где W.wi - терм, который становится новым текущим значением аккумулятора, E.ei - произвольное объектное выражение. Результат функции - выражение W.wn E.e1…E.en.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.r

где V.r - выражение:

ПРИМЕРЫ:

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>) (E.E1)
<Map_Accumulator &Add1 (1)> --> (1)

поле памяти: Add1 (E.E1) (E.E2) = (<add (E.E1) E.E2>) (E.E1)
<Map_Accumulator &Add1 (1) (2) (1 3)> --> (1 6) (1) (3)

Функция MaxN

ВЫЗОВ:

<MaxN (E.f) E.t>

где E.f - целое число (может быть пустое), E.t - последовательность целых чисел (может быть пустые) в структурных скобках.

ОПИСАНИЕ:

Эта функция вычисляет максимальное целое число в последовательности целых чисел аргумента.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.m

где V.m:

Если V.m положительное, то знак ‘+’ не ставитcя. Нулевое V.m выдается в виде макроцифры 0.

ПРИМЕРЫ:

<MaxN () (1 0) (6)> --> 1 0
<MaxN (1 0)> --> 1 0

Функция MaxW

ВЫЗОВ:

<MaxW W.f E.t>

где W.f - терм, E.t - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция вычисляет максимальный терм нулевого уровня выражения W.fE.t. Термы выражения сравниваются между собой лексикографически.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.m

где W.m - терм:

ПРИМЕРЫ:

<MaxW () 9 'fg'> --> ()
<MaxW ()> --> ()

Функция MinN

ВЫЗОВ:

<MinN (E.f) E.t>

где E.f - целое число (может быть пустое), E.t - последовательность целых чисел (может быть пустые) в структурных скобках.

ОПИСАНИЕ:

Эта функция вычисляет минимальное целое число в последовательности целых чисел аргумента.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.m

где V.m:

Если V.m положительное, то знак ‘+’ не ставитcя. Нулевое V.m выдается в виде макроцифры 0.

ПРИМЕРЫ:

<MinN () (1 0) (6)> --> 0
<MinN ()> --> 0

Функция Minus

ВЫЗОВ:

<Minus E.n>

где E.n - целое число (может быть пустое).

ОПИСАНИЕ:

Функция Minus изменяет знак целого числа E.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции Minus является число E.n, но с измененным знаком. Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<Minus 1> --> '-' 1
<Minus '-' 1> --> 1

Функция MinW

ВЫЗОВ:

<MinW W.f E.t>

где W.f - терм, E.t - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция вычисляет минимальный терм нулевого уровня выражения W.fE.t. Термы выражения сравниваются между собой лексикографически.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.m

где W.m - терм:

ПРИМЕРЫ:

<MinW () 9 'fg'> --> 'f'
<MinW 'f'> --> 'f'

Функция mul

ВЫЗОВ:

<mul (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция mul умножает целые числа E.E1 и E.E2.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Целое число (произведение E.E1 и E.E2). Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<mul (2) '-' 2> --> '-' 4
<mul (2)> --> 0
<mul (65536) 65536> --> 1 0

Функция muln

ВЫЗОВ:

<muln (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Отличается от mul только тем, что выдает нулевой результат в виде пустого выражения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Как в mul, только нулевой результат выдается в виде пустого выражения.

ПРИМЕР:

<muln () 3> -->

Функция multe

ВЫЗОВ:

<multe N.n E.e>

где N.n - макроцифра, а E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция копирует (размножает) выражение в заданном количестве экземпляров.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e E.e…E.e

где выражение E.e повторяется N.n раз. В частности, если N.n равно нулю, результатом замены является пустое выражение.

ПРИМЕРЫ:

<multe 5 'A'> --> 'AAAAA'
<multe 2 'A'('B')> --> 'A'('B')'A'('B')
<multe 0> -->

Функция NCheck

ВЫЗОВ:

<NCheck E.n>

где E.n - целое число (может быть пустое).

ОПИСАНИЕ:

Функция NCheck проверяет, что аргумент - целое число.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.n

ПРИМЕР:

<NCheck 1> --> 1

Функция NEL

ВЫЗОВ:

<NEL (E.E1) E.E2>

где E.E1 и E.E2 - произвольные объектные выражения.

ОПИСАНИЕ:

Функция NEL выполняет лексикограыическую операцию ‘не равно’ для двух выражений.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<NEL ('b') 'a'> --> &True
<NEL ('a') 'b'> --> &True
<NEL ('a') 'a'> --> &False

Функция NEN

ВЫЗОВ:

<NEN (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция NEN выполняет операцию ‘не равно’ для двух целых чисел.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<NEN (5) 3> --> &True
<NEN (3) 5> --> &True
<NEN () > --> &False

Функция NNorm

ВЫЗОВ:

<NNorm E.n>

где E.n - целое число (может быть пустое).

ОПИСАНИЕ:

Функция NNorm нормализует представление целого числа E.n. То есть, если целое число положительное, знак ‘+’ не ставится. Убираются все стоящие вначале макроцифры 0. Нулевое число выдается в виде макроцифры 0.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции NNorm является нормализованное представление целого числа E.n.

ПРИМЕРЫ:

<NNorm '+' 0 0 1> --> 1
<NNorm > --> 0
<NNorm 2> --> 2
<NNorm '-' 0 0> --> 0
<NNorm '-' 1 0> --> '-' 1 0

Функция Not

ВЫЗОВ:

<Not S.b>

где S.b - символ-метка &True или &False.

ОПИСАНИЕ:

Функция Not выполняет логическую операцию отрицания.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<Not &False> --> &True
<Not &True> --> &False

Функция nrel

ВЫЗОВ:

<nrel (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция nrel предназначена для сравнения целых чисел с учетом знака.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.r (E.E1) E.E2

где S.r - символ-литера:

ПРИМЕРЫ:

<nrel (5) 3> --> '>' (5) 3
<nrel ('-' 5) '-' 3> --> '<' ('-' 5) '-' 3
<nrel () 0 0> --> '=' () 0 0

Функция numb

ВЫЗОВ:

<numb E.d>

где E.d - цепочка символов-литер, являющаяся десятичной записью целого числа со знаком или без него, или пустое выражение (воспринимается как нуль).

ОПИСАНИЕ:

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

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.n

где V.n - число E.d в виде макроцифры (возможно, со знаком). Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<numb '1000'> --> 1000
<numb '-4294967295'> --> '-' 4294967295
<numb > --> 0
<numb '1000000000'> --> 1000000000
<numb '+025'> --> 25

Функция Or

ВЫЗОВ:

<Or E.b>

где E.b - выражение (может быть пустое), состоящее из символов-меток &True, &False и таких структурных термов (E.e), что < E.e> является функцией, которая возвращает выражение, аналогичное E.b.

ОПИСАНИЕ:

Функция Or выполняет логическую операцию ИЛИ. Функция последовтельно на нулевом уровне E.b проходит &False. Если на нулевом уровне встречается структурный терм (E.e), то (E.e) заменяется на результат функции < E.e>. Как только встречается &True, функция игнорирует оставшуюся часть E.b, возвращая &True. Дойдя до конца E.b, функция возвращает &False.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t

где S.t - символ-метка:

ПРИМЕРЫ:

<Or > --> &False
<Or &False> --> &False
<Or &True &False> --> &True
<Or (&Is_Type &Void)> --> &True

Функция ord

ВЫЗОВ:

<ord E.c>

где E.c - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция заменяет в выражении E.c все символы-литеры макроцифрами с соответствующим 8-битным кодом (от 0 до 255).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.n

где E.n - выражение E.c, в котором все символы-литеры заменены макроцифрами.

ПРИМЕР:

<ord '>' 567 (67) ('A')> --> 62 567 (67) (65)

Функция p1

ВЫЗОВ:

<p1 N.n>

где N.n - макроцифра.

ОПИСАНИЕ:

Функция p1 производит прибавление единицы к макроцифре. Попытка прибавить единицу к макроцифре 4294967295 приводит к авосту “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: макроцифра, на единицу большая N.n.

ПРИМЕРЫ:

<p1 10> --> 11
<p1 738> --> 739

Функция Path_Separator

ВЫЗОВ:

<Path_Separator>

ОПИСАНИЕ:

Функция Path_Separator возвращает символ разделения каталогов в переменной окружения PATH в текущей среде.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.p

где S.p - символ-литера:

ПРИМЕРЫ:

Среда Windows
<Path_Separator> --> ';'

Среда POSIX
<Path_Separator> --> ':'

Функция Platform

ВЫЗОВ:

<Platform>

ОПИСАНИЕ:

Функция Platform возвращает текущую среду Windows или POSIX.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.p

где S.p - символ-метка:

ПРИМЕРЫ:

Среда Windows
<Platform> --> &WINDOWS

Среда POSIX
<Platform> --> &POSIX

Функция print

ВЫЗОВ:

<print E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

В результате выполнения функции print в стандартный выходной поток (обычно это экран дисплея, но средствами операционной системы можно переназначить его в некоторый файл), выводится выражение E.e. Если выражение не помещается в одной печатной строке, оно продолжается на следующих строках. В конце происходит переход на новую строку. При использовании функции print выражение E.e выводится следующим образом. Символы-литеры (объектные знаки) выводятся в виде соответствующих литер. Структурные скобки “(“ и “)” выводятся в виде литер “(“ и “)”. Составные символы печатаются в том же виде, как они изображаются в РефалАБ-программах, за исключением того, что в качестве ограничителей для символов-ссылок и нестандартных символов используется не “/”, а апостроф “’”. Символы-числа обрамляются апострофами “’”. Символы-метки выводятся в виде имени символа-метки, обрамленного апострофами “’”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<print 'function' (&f1)> --> 'function' (&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

function('F1')

Функция printm

ВЫЗОВ:

<printm E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции print. Только при использовании функции printm выражение выводится в том же виде, в котором оно записывается в исходных РефалАБ-программах. Единственное различие заключается в том, что при переходе на следующую строку не ставится признак продолжения “+”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<printm 'function' (&f1)> --> 'function' (&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

'function'(&F1)

Функция prints

ВЫЗОВ:

<prints E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции print. Только при использовании функции prints символы выражения не обрамляются апострофами.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<prints 'function' (&f1)> --> 'function' (&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

function(F1)

Функция prout

ВЫЗОВ:

<prout Ee>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции print.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<prout 'this' (&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

this('FUNC')

Функция proutm

ВЫЗОВ:

<proutm E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции printm.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<proutm 'this' (&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

'this'(&FUNC)

Функция prouts

ВЫЗОВ:

<prouts Ee>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Аналогична функции prints.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<prouts 'this' (&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

this(FUNC)

Функция QSortN

ВЫЗОВ:

<QSortN E.n>

где E.n - последовательность (может быть пустая) целых чисел (может быть пустые) в структурных скобках.

ОПИСАНИЕ:

Эта функция производит быструю сортировку целых чисел последовательности E.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.s

где E.s - выражение:

ПРИМЕРЫ:

<QSortN > -->
<QSortN (9) () (1)> --> () (1) (9)
<QSortN (9)> --> (9)

Функция QSortW

ВЫЗОВ:

<QSortW E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция производит быструю сортировку термов нулевого уровня выражения E.e. Термы выражения сравниваются между собой лексикографически.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.s

где E.s - выражение:

ПРИМЕРЫ:

<QSortW > -->
<QSortW 9 ('hg') 1 &Print ('j') &QSortW 'h' ()> --> 'h' &QSortW &Print 1 9 () ('hg') ('j')
<QSortW 9> --> 9

Функция random

ВЫЗОВ:

<random N.n>

где N.n - макроцифра.

ОПИСАНИЕ:

Функция random генерирует случайное количество (не более N.n) случайных макроцифр. Если N.n = 0, возникает авост “Отождествление невозможно”.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.r

нде V.r - непустая сгенерированная цепочка макроцифр.

ПРИМЕР:

<random 1> --> 5463
<random 3> --> 72341 14561212 345
<random 3> --> 912704

Функция random_number

ВЫЗОВ:

<random_number N.n>

где N.n - макроцифра.

ОПИСАНИЕ:

Функция random_number генерирует случайное число от 0 до N.n.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: N.r

где N.r - сгенерированное случайное число в виде макроцифры.

ПРИМЕР:

<random_number 0> --> 0
<random_number 2> --> 1
<random_number 2> --> 2
<random_number 2> --> 0

Функция remove_file

ВЫЗОВ:

<remove_file E.f>

где E.f - выражение из символов-литер, задаюшее имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.

ОПИСАНИЕ:

Указанный файл удаляется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение из символов-литер:

ПРИМЕРЫ:

<remove_file 'a.a'> -->
<remove_file 'd:\\test\\a.a'> -->
<remove_file 'test/a.a'> -->

Процесс удаления файла 'a.a' завершился с ошибкой 
<remove_file 'a.a'> --> 'описание кода ошибки'

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция rename

ВЫЗОВ:

<rename V.f>

где V.f - непустое выражение из символов-литер и макроцифры 0, представляет собой два имени файлов или каталогов (возможно, с указанием пути), не превышающие 260 символов в среде Windows или 4096 символов в среде POSIX, разделенных макроцифрой 0.

ОПИСАНИЕ:

Функция rename копирует файл или каталог, заданный первым именем, в файл или каталог, заданный вторым именем с уничтожением первого файла или каталога. Таким образом реализуется либо переименование файла или каталога (если оба имени отсылают к одной и той же директории), либо перемещение файла, но не каталога, из одной директории в другую с сохранением того же имени или с присвоением файлу другого имени.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение из символов-литер:

ПРИМЕРЫ:

<rename 'a.a' 0 'b.b'> -->
<rename 'c:\\a.a' 0 'd:\\a.a'> -->
<rename 'd:\\a\\a.a' 0 'c:\\f1\\f1.1\\c.c'> -->
<rename 'a/a.a' 0 'f1/f1.1/c.c'> -->

Процесс переименования файла 'a.a' в 'b.b' завершился с ошибкой 
<rename 'a.a' 0 'b.b'> --> 'описание кода ошибки'

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Функция Save_FBytes

ВЫЗОВ:

<Save_FBytes S.n (E.f) E.b>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX; E.b - выражение (может быть пустым), которое содержит только символы-литеры и макроцифры.

ОПИСАНИЕ:

Эта функция открывает файл на запись в бинарном режиме. Если файл существует, то файл будет перезаписан. Если файл не существует, то файл будет создан. Далее функция записывает в файл байты E.b. При этом все символы-литеры в выражении E.b преобразуются в ихние 8-битные коды от 0 до 255, а макроцифры в выражении E.b преобразуются по модулю 256 в числа от 0 до 255. В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<Save_FBytes 3 ('input.bin') 'n' 89> -->
и в файл запишутся байты 110 и 89

Файл 'input.bin' не может быть открыт
<Save_FBytes 3 ('input.bin') 'n' 89> -->  'описание кода ошибки' &NULL

Функция Save_File

ВЫЗОВ:

<Save_File S.n (E.f) E.l>

где S.n - номер файла (макроцифра от 0 до 9); E.f - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX; E.l - выражение (может быть пустым) вида (E.l1)…(E.ln), E.l1…E.ln содержат только символы-литеры.

ОПИСАНИЕ:

Эта функция открывает файл на запись. Если файл существует, то файл будет перезаписан. Если файл не существует, то файл будет создан. Далее функция записывает в файл строки E.l1…E.ln. Если любое из этих выражений пусто, в файл добавляется пустая строка. Если E.l - пусто, то в файл ничего не записывается и он будет пустым. В конце работы функция закрывает файл.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

где E.e - выражение:

ПРИМЕРЫ:

<Save_File 3 ('input.txt') ('first string') ('second string')> -->
и в файл запишутся строки 'first string' и 'second string'

Файл 'input.txt' не может быть открыт
<Save_File 3 ('input.txt') ('first string') ('second string')> -->  'описание кода ошибки' &NULL

Функция Set

ВЫЗОВ:

<Set E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция формирует множество термов нулевого уровня выражения E.e. Т.е. это выражение E.e, но без повторяющихся термов нулевого уровня.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.s

где E.s - выражение E.e, но без повторяющихся термов нулевого уровня.

ПРИМЕРЫ:

<Set 'w' (0) 1> --> 'w' (0) 1
<Set 'w' (0) 1 (0)> --> 'w' (0) 1

Функция shl

ВЫЗОВ:

<shl (E.E) N.s>

где E.E - целое число (может быть пустое), N.s - макроцифра.

ОПИСАНИЕ:

Функция shl вычисляет целое число - битовый сдвиг влево целого числа E.E на N.s бит. Макроцифры числа представляются как непрерывная цепочка бит, которая сдвигается влево на N.s бит, с заполнением нулей справа. Полученная цепочка бит и есть макроцифы результирующего числа. Знак результирующего числа совпадает со знаком числа E.E. По сути, битовый сдвиг влево есть быстрое целочисленное умножение числа E.e на 2^N.s.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции shl является целое число (битовый сдвиг влево целого числа E.E на N.s бит). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<shl (5) 1> --> 10
<shl ('-' 1 2) 33> --> '-' 2 4 0
<shl (2) 31> --> 1 0

Функция shr

ВЫЗОВ:

<shr (E.E) N.s>

где E.E - целое число (может быть пустое), N.s - макроцифра.

ОПИСАНИЕ:

Функция shr вычисляет целое число - битовый сдвиг вправо целого числа E.E на N.s бит. Макроцифры числа представляются как непрерывная цепочка бит, которая сдвигается вправо на N.s бит, с заполнением нулей слева. Полученная цепочка бит и есть макроцифы результирующего числа. Знак результирующего числа совпадает со знаком числа E.E. По сути, битовый сдвиг вправо есть быстрое целочисленное деление числа E.e на 2^N.s с округлением в меньшую сторону по модулю.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции shr является целое число (битовый сдвиг вправо целого числа E.E на N.s бит). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<shr (5) 1> --> 2
<shr ('-' 1 2) 2> --> '-' 1073741824
<shr (1 2) 33> --> 0

Функция step

ВЫЗОВ:

<step>

ОПИСАНИЕ:

Функция возвращает количество завершенных шагов процесса. Точнее, значение поля step текущего процесса (п. 3.8, п. 3.11).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.n

где S.n - макроцифра.

ПРИМЕР:

<step > --> количество завершенных шагов процесса

Функция sub

ВЫЗОВ:

<sub (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Функция sub предназначена для вычитания E.E2 из E.E1.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Результатом вызова функции sub является целое число (вычитание E.E2 из E.E1). Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

<sub (1) 2> --> '-' 1
<sub (2) > --> 2
<sub (1 1) 2> --> 4294967295

Функция subn

ВЫЗОВ:

<subn (E.E1) E.E2>

где E.E1 и E.E2 - целые числа (может быть пустые).

ОПИСАНИЕ:

Отличается от sub только тем, что выдает нулевой результат в виде пустого выражения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Как в sub, только нулевой результат выдается в виде пустого выражения.

ПРИМЕР:

<subn (0) > -->

Функция symb

ВЫЗОВ:

<symb E.n>

где E.n - целое число в виде цепочки макроцифр (возможно, со знаком) (может быть пустое).

ОПИСАНИЕ:

Преобразует целое число, не превышающее по абсолютной величине 4294967295, в символьное представление.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.d

где V.d - цепочка символов-литер, являющаяся записью числа E.n в десятичной системе счисления. Если число E.n положительно - знак ‘+’ в E.d не ставитcя. Нулевой результат изображается как ‘0’.

ПРИМЕРЫ:

<symb 1000> --> '1000'
<symb '-' 4294967295> --> '-4294967295'
<symb > --> '0'
<symb 0> --> '0'
<symb 1000000000> --> '1000000000'
<symb '-' 0 25> --> '-25'

Функция system

ВЫЗОВ:

<system E.c>

где E.c - цепочка объектных символов, представляющая команду операционной системы, не превышающая 8191 символов.

ОПИСАНИЕ:

Функция system выполняет команду операционной системы E.c с помощью функции system() языка Си.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.n

где V.n - число в виде макроцифры (возможно, со знаком):

Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.

ПРИМЕРЫ:

Среда Windows
<system > --> 0
<system 'l'> --> 1
<system 'pause'> --> 0

Среда POSIX
<system > --> 0
<system 'l'> --> 127
<system 'ls'> --> 0

Функция time

ВЫЗОВ:

<time>

ОПИСАНИЕ:

Функция time возвращает текущую дату и время в локали операционной системы.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Цепочка символов-литер, представляющая текущую дату и время в локали операционной системы. Пусто, если строка, представляющая текущую дату и время пустая или возникла ошибка при формировании строки. Символ-метка &NULL, если текущую дату и время в локали операционной системы невозможно определить.

ПРИМЕР:

<time> --> 'текущая дата и время в локали операционной системы'

Функция tm

ВЫЗОВ:

<tm S.t>

где S.t - символ-литера.

Если S.t - ‘S’ или ‘s’, секундомер запускается.

Если S.t - ‘G’ или ‘g’, функция возвращает текущее время секундомера.

ОПИСАНИЕ:

Функция tm при вызове запускает секундомер или возвращает текущее время секундомера. Если функция возвращает текущее время секундомера без предварительного запуска, то время запуска секундомера 00:00:00 UTC 1 января 1970 года.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Пусто, если секундомер запускается. Если функция возвращает текущее время секундомера, то цепочка символов-литер, представляющая текущее время секундомера.

ПРИМЕРЫ:

<tm 's'> -->
<tm 'g'> --> '00:00:00.000000100'

Функция tm_elapsed

ВЫЗОВ:

<tm_elapsed>

ОПИСАНИЕ:

Функция tm_elapsed возвращает текущее время работы интерпретатора языка сборки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

Пусто, если время работы интерпретатора языка сборки не измеряется. Если данное время измеряется, то цепочка символов-литер, представляющая текущее время работы интерпретатора.

ПРИМЕРЫ:

<tm_elapsed> -->
<tm_elapsed> --> '00:00:00.0000022100'

Функция Trim

ВЫЗОВ:

<Trim E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Trim возвращает выражение E.e, но без пробелов в начале и в конце этого выражения. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение E.e без пробелов в начале и в конце.

ПРИМЕРЫ:

<Trim 'A'0' d'> --> 'A'0' d'
<Trim '\n A'0' d\t'> --> 'A'0' d'

Функция TrimL

ВЫЗОВ:

<TrimL E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Trim возвращает выражение E.e, но без пробелов в начале этого выражения. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение E.e без пробелов в начале.

ПРИМЕРЫ:

<TrimL 'A'0' d'> --> 'A'0' d'
<TrimL '\n A'0' d'> --> 'A'0' d'

Функция TrimR

ВЫЗОВ:

<TrimR E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция TrimR возвращает выражение E.e, но без пробелов в конце этого выражения. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r

где E.r - выражение E.e без пробелов в конце.

ПРИМЕРЫ:

<TrimR 'A'0' d'> --> 'A'0' d'
<TrimR 'A'0' d\t'> --> 'A'0' d'

Функция try

ВЫЗОВ:

<try E.E1>

где E.E1 - произвольное объектное выражение.

ОПИСАНИЕ:

Выполнение этого вызова происходит следующим образом: создается новое поле зрения, в которое помещается функциональный терм

< E.E1>

После этого делается попытка вычислить этот функциональный терм. Возможны три исхода этой попытки: нормальный останов, останов “Отождествление невозможно” и останов “Свободная память исчерпана”. Затем формируется соответствующий результат замены (возвращаемое значение) и дополнительное поле зрения, созданное в результате обращения к try, уничтожается. Можно обращаться к try рекурсивно. В этом случае образуется стек из полей зрения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:

В случае нормального останова результатом замены будет выражение

'N' E.E2

где E.E2 - результат вычисления терма < E.E1>.

В случае останова “Отождествление невозможно” результатом замены будет выражение

'R' E.E3

где E.E3 - содержимое того функционального терма < E.E3>, попытка вычисления которого привела к останову.

В случае останова “Свободная память исчерпана” результатом замены будет выражение

'S'

ПРИМЕР:

поле памяти: rev s.s1 s.s2 = s.s2 s.s1
<try &rev 'ab'> --> 'N' 'ba'
<try &rev 'abc'> --> 'R' &rev 'abc'

Функция Type

ВЫЗОВ:

<Type E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция Type предназначена для распознавания типа выражения E.e. Тип выражения зависит от терма, с которого начинается выражение E.e. Типы выражения могут быть:

Если выражениие E.e начинается с символа-литеры, то выражение также может иметь один из двух подтипов:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.t E.s E.e

где S.t - символ-метка, определяющая тип выражения E.e;

E.s - символ-метка (может отсутствовать), определяющая подтип выражения, если тип выражения Char.

S.t = &Void, если тип выражения - Void.

S.t = &Label, если тип выражения - Label.

S.t = &Number, если тип выражения - Number.

S.t = &Reference, если тип выражения - Reference.

S.t = &Char, если тип выражения - Char.

S.t = &Brackets, если тип выражения - Brackets.

S.t = &OtherT, если тип выражения - OtherT.

E.s = &Latin, если подтип выражения - Latin.

E.s = &Digit, если подтип выражения - Digit.

ПРИМЕРЫ:

<Type > --> &Void
<Type 9> --> &Number 9
<Type 'G'> --> &Char &Latin 'G'
<Type '9'> --> &Char &Digit '9'
<Type '='> --> &Char '='
<Type &Type> --> &Label &Type
<Type ()> --> &Brackets ()

Функция UnBrackets

ВЫЗОВ:

<UnBrackets (E.e)>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция UnBrackets удаляет структурные скобки в структурном терме (E.e).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕРЫ:

<UnBrackets ()> -->
<UnBrackets (1 6)> --> 1 6

Функция upper

ВЫЗОВ:

<upper E.c>

где E.c - произвольное объектное выражение.

ОПИСАНИЕ:

Эта функция заменяет в выражении E.c все строчные латинские символы-литеры заглавными символами-литерами.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.N

где E.N - выражение E.c, в котором все строчные латинские символы-литеры заменены заглавными символами-литерами.

ПРИМЕР:

<upper '>' 0 ('j') ('A')> --> '>' 0 ('J') ('A')

Функция write

ВЫЗОВ:

<write E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична print. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<write 'function'(&f1)> --> 'function'(&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

function('F1')

Функция writem

ВЫЗОВ:

<writem E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична printm. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<writem 'function'(&f1)> --> 'function'(&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

'function'(&F1)

Функция writes

ВЫЗОВ:

<writes E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична prints. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e

ПРИМЕР:

<writes 'function' (&f1)> --> 'function' (&F1)

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

function(F1)

Функция wrout

ВЫЗОВ:

<wrout Ee>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична prout. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<wrout 'this'(&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

this('FUNC')

Функция wroutm

ВЫЗОВ:

<wroutm E.e>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична proutm. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<wroutm 'this'(&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

'this'(&FUNC)

Функция wrouts

ВЫЗОВ:

<wrouts Ee>

где E.e - произвольное объектное выражение.

ОПИСАНИЕ:

Функция аналогична prouts. Только в конце не происходит переход на новую строку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто

ПРИМЕР:

<wrouts 'this' (&func)> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

this(FUNC)

2.20. Описание пустых функций

Здесь представлены описания пустых функций, расположенных в алфавитном порядке. Для каждой пустой функции приводится символ-метка, описание и пример.

Пустая функция Begin

СИМВОЛ-МЕТКА:

&BEGIN

ОПИСАНИЕ:

Является символом-меткой, представляющим начало чего-то, например начало файла.

ПРИМЕР:

<fseek 3 5 &Begin> -->

Пустая функция Brackets

СИМВОЛ-МЕТКА:

&BRACKETS

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Brackets.

ПРИМЕР:

поле памяти:
Ex &Brackets E._ = &True
    E._ = &False
<Ex <Type ()>> --> &True
<Ex <Type 9>> --> &False

Пустая функция Call

СИМВОЛ-МЕТКА:

&CALL

ОПИСАНИЕ:

Применяется в функции If для превращения выражения (&Call E.e) в результат функции < E.e>, где E.e - произвольное объектное выражение.

ПРИМЕР:

<If (&True (&Call &Add ())) ()> --> 0

Пустая функция Char

СИМВОЛ-МЕТКА:

&CHAR

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Char.

ПРИМЕР:

поле памяти:
Ex &Char E._ = &True
    E._ = &False
<Ex <Type '9'>> --> &True
<Ex <Type 9>> --> &False

Пустая функция Cur

СИМВОЛ-МЕТКА:

&CUR

ОПИСАНИЕ:

Является символом-меткой, представляющим текущую позицию чего-то, например текущую позицию файла.

ПРИМЕР:

<fseek 3 5 &Cur> -->

Пустая функция Digit

СИМВОЛ-МЕТКА:

&DIGIT

ОПИСАНИЕ:

Является символом-меткой, представляющим подтип выражения - Digit.

ПРИМЕР:

поле памяти:
Ex E._ &Digit E.__ = &True
    E._ = &False
<Ex <Type '9'>> --> &True
<Ex <Type 'a'>> --> &False

Пустая функция End

СИМВОЛ-МЕТКА:

&END

ОПИСАНИЕ:

Является символом-меткой, представляющим конец чего-то, например конец файла.

ПРИМЕР:

<fseek 3 '-' 5 &End> -->

Пустая функция False

СИМВОЛ-МЕТКА:

&FALSE

ОПИСАНИЕ:

Является символом-меткой, представляющим логическую ложь.

ПРИМЕР:

поле памяти:
Ex &False/ = 'False'
    S._ = 'Not False'
<Ex &False> --> 'False'
<Ex 'f'> --> 'Not False'

Пустая функция feof

СИМВОЛ-МЕТКА:

&FEOF

ОПИСАНИЕ:

Является символом-меткой, представляющим конец файла.

ПРИМЕР:

поле памяти:
Ex E._ &FEOF = &True
    E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> &False
<Ex <FGetS 0>> --> &True

Пустая функция ferror

СИМВОЛ-МЕТКА:

&FERROR

ОПИСАНИЕ:

Является символом-меткой, представляющим ошибки в файле.

ПРИМЕР:

поле памяти:
Ex E._ &FError = &True
    E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> &False
<Ex <FPutS 0>> --> &True

Пустая функция Label

СИМВОЛ-МЕТКА:

&LABEL

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Label.

ПРИМЕР:

поле памяти:
Ex &Label E._ = &True
    E._ = &False
<Ex <Type &Type>> --> &True
<Ex <Type 9>> --> &False

Пустая функция Latin

СИМВОЛ-МЕТКА:

&LATIN

ОПИСАНИЕ:

Является символом-меткой, представляющим подтип выражения - Latin.

ПРИМЕР:

поле памяти:
Ex E._ &Latin E.__ = &True
    E._ = &False
<Ex <Type 'a'>> --> &True
<Ex <Type '9'>> --> &False

Пустая функция NULL

СИМВОЛ-МЕТКА:

&NULL

ОПИСАНИЕ:

Является символом-меткой, представляющим невалидный объект.

ПРИМЕР:

поле памяти:
Ex &NULL = &True
    E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FClose 0>> --> &False
<Ex <FClose 0>> --> &True

Пустая функция Number

СИМВОЛ-МЕТКА:

&NUMBER

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Number.

ПРИМЕР:

поле памяти:
Ex &Number E._ = &True
    E._ = &False
<Ex <Type '9'>> --> &False
<Ex <Type 9>> --> &True

Пустая функция OtherT

СИМВОЛ-МЕТКА:

&OTHERT

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - OtherT.

ПРИМЕР:

поле памяти:
Ex &OtherT E._ = &True
    E._ = &False
<Ex <Type '9'>> --> &False
<Ex &OtherT> --> &True

Пустая функция POSIX

СИМВОЛ-МЕТКА:

&POSIX

ОПИСАНИЕ:

Является символом-меткой, представляющим среду POSIX. Применяется совместно с Platform и пустой функцией Windows для написания программ, по разному ведущих себя в средах Windows и POSIX.

ПРИМЕР:

Среда POSIX
поле памяти:
Ex &Windows = 'It is Windows'
    &POSIX = 'It is POSIX'
<Ex <Platform>> --> 'It is POSIX'

Пустая функция Reference

СИМВОЛ-МЕТКА:

&REFERENCE

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Reference.

ПРИМЕР:

поле памяти:
Ex &Reference E._ = &True
    E._ = &False
<Ex <Type <New>>> --> &True
<Ex <Type 9>> --> &False

Пустая функция stderr

СИМВОЛ-МЕТКА:

&STDERR

ОПИСАНИЕ:

Является символом-меткой, представляющим стандартный поток вывода ошибки.

ПРИМЕР:

<FPutS &StdErr 'string'> -->

и на экране появится:

string

Пустая функция stdin

СИМВОЛ-МЕТКА:

&STDIN

ОПИСАНИЕ:

Является символом-меткой, представляющим стандартный входной поток.

ПРИМЕР:

<FGetS &StdIn> --> 'эта строка введена с клавиатуры'

Пустая функция stdout

СИМВОЛ-МЕТКА:

&STDOUT

ОПИСАНИЕ:

Является символом-меткой, представляющим стандартный выходной поток.

ПРИМЕР:

<FPutS &StdOut 'string'> -->

и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:

string

Пустая функция True

СИМВОЛ-МЕТКА:

&TRUE

ОПИСАНИЕ:

Является символом-меткой, представляющим логическую истину.

ПРИМЕР:

поле памяти:
Ex &True = 'True'
    S._ = 'Not True'
<Ex &True> --> 'True'
<Ex 'f'> --> 'Not True'

Пустая функция Void

СИМВОЛ-МЕТКА:

&VOID

ОПИСАНИЕ:

Является символом-меткой, представляющим тип выражения - Void.

ПРИМЕР:

поле памяти:
Ex &Void = &True
    E._ = &False
<Ex <Type >> --> &True
<Ex <Type 9>> --> &False

Пустая функция Windows

СИМВОЛ-МЕТКА:

&WINDOWS

ОПИСАНИЕ:

Является символом-меткой, представляющим среду Windows. Применяется совместно с Platform и пустой функцией POSIX для написания программ, по разному ведущих себя в средах Windows и POSIX.

ПРИМЕР:

Среда Windows
поле памяти:
Ex &Windows = 'It is Windows'
    &POSIX = 'It is POSIX'
<Ex <Platform>> --> 'It is Windows'

2.21. Описание спецификаторов

Здесь представлены описания спецификаторов, расположенных в алфавитном порядке. Для каждого спецификатора приводится имя, описание и пример.

Спецификатор Bool

ИМЯ:

:Bool:

ОПИСАНИЕ:

Спецификатор Bool определяет логический тип - символы-метки &True (логическая истина) и &False (логическая ложь).

ПРИМЕР:

поле памяти:
IsBool S(:Bool:)._ = &True
    S._ = &False
<IsBool &True> --> &True
<IsBool &False> --> &True
<IsBool 'r'> --> &False

Спецификатор Directory_Separators

ИМЯ:

:Directory_Separators:

ОПИСАНИЕ:

Спецификатор Directory_Separators определяет множество символов для разделения уровней папок в строке пути в текущей среде. Символы для разделения уровней папок в строке пути:

ПРИМЕРЫ:

Среда Windows
поле памяти:
Is_Directory_Separator S(:Directory_Separators:)._ = &True
    S._ = &False
<Is_Directory_Separator '\\'> --> &True
<Is_Directory_Separator '/'> --> &True
<Is_Directory_Separator ';'> --> &False

Среда POSIX
поле памяти:
Is_Directory_Separator S(:Directory_Separators:)._ = &True
    S._ = &False
<Is_Directory_Separator '/'> --> &True
<Is_Directory_Separator '\\'> --> &False

ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.

Спецификатор EOF

ИМЯ:

:EOF:

ОПИСАНИЕ:

Спецификатор EOF определяет символы EOF - символы-метки &FEOF (конец файла) и &FError (ошибки в файле).

ПРИМЕР:

поле памяти:
IsEOF S(:EOF:)._ = &True
    S._ = &False
<IsEOF &FEOF> --> &True
<IsEOF &FError> --> &True
<IsFEOF 'r'> --> &False

Спецификатор Max_Number

ИМЯ:

:Max_Number:

ОПИСАНИЕ:

Спецификатор Max_Number определяет максимальное значение макроцифры 4294967295.

ПРИМЕР:

поле памяти:
Is_Max_Number S(:Max_Number:)._ = &True
    S._ = &False
<Is_Max_Number 4294967295> --> &True
<Is_Max_Number 7> --> &False

Спецификатор Max_PathFileName

ИМЯ:

:Max_PathFileName:

ОПИСАНИЕ:

Спецификатор Max_PathFileName определяет максимальную длину имени файла (возможно, с указанием пути) в текущей среде. Максимальная длина имени файла:

ПРИМЕРЫ:

Среда Windows
поле памяти:
Is_Max_PathFileName S(:Max_PathFileName:)._ = &True
    S._ = &False
<Is_Max_PathFileName 260> --> &True
<Is_Max_PathFileName 4096> --> &False

Среда POSIX
поле памяти:
Is_Max_PathFileName S(:Max_PathFileName:)._ = &True
    S._ = &False
<Is_Max_PathFileName 4096> --> &True
<Is_Max_PathFileName 260> --> &False

Спецификатор Numbers_Files

ИМЯ:

:Numbers_Files:

ОПИСАНИЕ:

Спецификатор Numbers_Files определяет номера файлов от 0 до 9.

ПРИМЕР:

поле памяти:
Is_Numbers_Files S(:Numbers_Files:)._ = &True
    S._ = &False
<Is_Numbers_Files 0> --> &True
<Is_Numbers_Files 10> --> &False

Спецификатор White_Spaces

ИМЯ:

:White_Spaces:

ОПИСАНИЕ:

Спецификатор White_Spaces определяет множество пробелов. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.

ПРИМЕР:

поле памяти:
Is_White_Space S(:White_Spaces:)._ = &True
    S._ = &False
<Is_White_Space '\t'> --> &True
<Is_White_Space 'r'> --> &False