В состав языка программирования РефалАБ входит набор функций и спецификаторов, которые могут быть использованы в РефалАБ-программах в качестве внешних. Эти функции и спецификаторы хранятся в библиотеке объектных модулей, входящей в состав РефалАБ-системы.
Чтобы использовать любую из этих функций или спецификаторов в программе, написанной на РефалАБ, необходимо объявить ее внешней в соответствующем модуле с помощью директивы EXTRN.
Часть библиотечных функций, часть библиотечных пустых функций и спецификаторы написаны на РефалАБ. Остальные библиотечные функции, включая пустые, реализованы на языке Си и являются первичными.
Функции ввода-вывода предназначены для организации простейшего диалогового взаимодействия между пользователем и программой. Такими функциями являются:
Функции print, prout, prints, prouts, printm, proutm, write, wrout, writes, wrouts, writem и wroutm различаются возвращаемым в поле зрения значением, способом представления информации на экране и переходом в конце на новую строку.
Ввод и вывод может быть переназначен в произвольный файл средствами операционной системы.
Функции арифметики работают с целыми числами. Целое число - это последовательность макроцифр (т.е. “цифр” в позиционной системе счисления по основанию 2^32), которой может предшествовать символ знака. Примерами целых чисел являются:
'+' 14
545
'-' 8
1 0 - значение этого числа равно 2^32=4294967296
'-' 3 2035 - значение этого числа равно -12884903923
0
Целое число нуль представляется либо нулевой макроцифрой 0, либо пустым выражением.
Все функции арифметики, кроме p1 и m1, допускают использование пустого выражения в качестве аргумента и воспринимают его как нуль. При этом, некоторые функции выдают нулевой результат работы в виде макроцифры 0, а некоторые - в виде пустого выражения, т.к. в некоторых случаях это удобно.
К функциям арифметики относятся:
Для преобразования целых чисел в символьный вид и обратно используются следующие функции:
Отдельно стоящими функциями являются:
Также в библиотеке есть спецификатор Max_Number - максимальное значение макроцифры.
Стандартная библиотека РефалАБ содержит ряд функций, полезных при выполнении лексического анализа в трансляторах, системах естественноязыкового общения, языковых конверторах и т.д. Такими функциями являются:
Отдельно стоящей функцией является step - возвращает количество завершенных шагов процесса.
Также в библиотеке есть спецификатор White_Spaces - множество пробелов.
Описываемые в этом разделе функции позволяют работать не более чем с десятью файлами одновременно.
К этим функциям относятся следующие функции:
Функции 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 следует указывать его номер, помещая соответствующую макроцифру в аргументе.
В библиотеке есть спецификаторы:
Также работа с файлами производится с помощью следующих первичных функций:
Функция try позволяет писать программы, анализирующие аварийные ситуации типа “Отождествление невозможно” или “Свободная память исчерпана” и предпринимающие некоторые дальнейшие действия по обработке таких ситуаций.
Функция try порождает новое поле зрения, помещает в него функциональный терм, определенный в ее аргументе, и пытается вычислить его. Результат такой попытки возвращается в то поле зрения, из которого была вызвана try.
После того, как результат замены сформирован, дополнительное поле зрения, созданное в результате обращения к try, уничтожается.
Можно обращаться к try рекурсивно. В этом случае образуется стек из полей зрения, однако глубина рекурсии ограничена. Увеличив размер данного стека, можно увеличить глубину вложенности try.
В некоторых случаях возникает необходимость превратить цепочку объектных символов в символ-метку или, наоборот, получить из символа-метки цепочку объектных символов, составляющих его тело. Например, из цепочки символов ‘ABCDE’ построить символ &ABCDE или символ-метку &label превратить в цепочку ‘LABEL’. При этом должно выполняться следующее требование: если мы будем превращать одну и ту же цепочку символов в символ-метку несколько раз, то все созданные символы-метки должны быть равны друг другу, т.е. являться экземплярами одного и того же символа.
Для создания символов-меток и обратного превращения их в цепочки объектных символов используются функции ftochar, chartof и functab:
Библиотека РефалАБ содержит пять первичных функций для работы с копилкой:
Подробное описание копилки и операций для работы с ней представлено в 1 разделе.
Средством РефалАБ, дающим возможность обрабатывать произвольные графы, являются статические и динамические ящики.
Библиотека РефалАБ содержит шесть первичных функций для работы с ящиками:
Подробное описание этих функций представлено в 1 разделе.
Библиотека содержит ряд функций для работы со временем:
Функция delf позволяет писать программы, анализирующие поле зрения и удаляющие из него определенные функциональные термы.
Функция delf изменяет поле зрения, удаляя из него функциональные термы, находящиеся в определенной цепочке, являющаяся частью последовательности становления ведущими функциональных термов. Начало цепочки - функциональный терм, который станет ведущим после ведущего функционального терма, т.е. после вызова функции delf. Конец цепочки - функциональный терм, за которым следует сразу символ ‘#’. Также удаляется символ ‘#’.
В РефалАБ можно создавать функции высшего порядка, т.е. функции, содержащие в аргументе функции либо в виде символов-меток, либо в виде частично-примененных функций в форме струтктурных термов
(функция выражение)
где функция - символ-метка или частично-примененная функция.
Примерами функций, передаваемых в функции высшего порядка являются:
&add
(&add (2))
(&xopen 'r')
(&xopen 'r' 0)
((&xopen 'r') 0)
Библиотека РефалАБ содержит следующие функции высшего порядка:
Также в библиотеке есть обычная функция Del_Accumulator - вспомогательная функция для функции Map_Accumulator (удаляет аккумулятор из возвращаемого выражения функции Map_Accumulator).
В библиотеке есть функции и спецификаторы, специфичные для сред Windows и POSIX. Т.е. возвращаемые выражения этих функций и множества спецификаторов различны для сред Windows и POSIX. Они применяются для написания программ, по разному ведущих себя в средах Windows и POSIX.
Такими функциями являются:
Специфичными спецификаторами являются:
В библиотеке РефалАБ присутствуют следующие системные функции:
В библиотеке РефалАБ присутствуют следующие функции для работы со случайными числами:
В библиотеке РефалАБ присутствуют следующие пустые функции:
Здесь представлены описания функций, расположенных в алфавитном порядке. Для каждой функции приводится формат вызова (передаваемые аргументы), описание, возвращаемое значение и пример вызова функции в формате
<вызов функции> --> <результат замены>
ВЫЗОВ:
<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 (E.E1) E.E2>
где E.E1 и E.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от add только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в add, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<addn () > -->
ВЫЗОВ:
<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 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 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 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 возвращает все аргументы командной строки.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: 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')
ВЫЗОВ:
<card E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция card дает возможность читать записи из стандартного входного потока. Обычно в качестве входного потока назначается ввод с клавиатуры, но он может быть переназначен в файл при запуске программы (в этом случае необходимо следить за соответствием количества вызовов функции card и количества записей в файле, если записей меньше, чем вызовов, возможны непредсказуемые результаты).
Если E.e не пусто, то в начале работы функция выводит выражение E.e в стандартный выходной поток, как-будто она вызывает функцию
<wrouts E.e>
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
После вызова функции card программа переходит в состояние ожидания ввода строки. По окончании ввода (нажатии клавиши “Enter”) введенная строка и будет возвращаемым значением. Если в процессе ввода функция обнаружила в потоке EOF, то функция завершает работу и последний символ в возвращаемом выражении будет макроцифра 0.
ПРИМЕР:
<card > --> 'эта строка введена с клавиатуры'
ВЫЗОВ:
<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 V.c>
где V.c - непустая цепочка объектных символов.
ОПИСАНИЕ:
Функция chartof превращает цепочку литер в символ-метку, имеющий имя, совпадающее с заданной цепочкой литер. Цепочка литер обязанна быть непустой, количество литер не превышать 255, литеры могут быть любыми. Функция chartof создает и поддерживает таблицу символов-меток, порожденных ею из цепочек литер. Если цепочка литер встретилась в первый раз, то создается пустая функция, имя которой является соответствующим символом-меткой. Если такая же цепочка литер встречается еще раз, то новая функция не создается, а в качестве результата вырабатывается имя ранее созданной функции.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: символ-метка
ПРИМЕРЫ:
<chartof '$assA3434^&'> --> &$ASSA3434^&
<chartof 'ABCD'> --> &ABCD
ВЫЗОВ:
<chr E.n>
где E.n - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция заменяет в выражении E.n все макроцифры символами-литерами с соответствующим 8-битным кодом (по модулю 256).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.c
где E.c - выражение E.n, в котором все макроцифры заменены символами-литерами.
ПРИМЕР:
<chr 318 'h' ('j') (65)> --> '>' 'h' ('j') ('A')
ВЫЗОВ:
<Cvb E.d>
где E.d - цепочка символов-литер произвольной длины, являющаяся десятичной записью целого числа со знаком или без него. Пустое выражение эквивалентно нулю.
ОПИСАНИЕ:
Преобразует целое число E.d из символьного представления в цепочку макроцифр (возможно со знаком).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.n
где V.n - число в виде цепочки макроцифр. Если результат положителен - знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.
ПРИМЕРЫ:
<Cvb > --> 0
<Cvb '+025'> --> 25
<Cvb '1000000000'> --> 1000000000
ВЫЗОВ:
<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 E.N>
где E.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Dec производит вычитание единицы из целого числа E.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Dec является целое число (вычитание из E.N единицы). Если результат положительный, то знак ‘+’ не ставитcя. Нулевой результат выдается в виде макроцифры 0.
ПРИМЕРЫ:
<Dec '+' 1> --> 0
<Dec > --> '-' 1
<Dec '-' 4294967295> --> '-' 1 0
ВЫЗОВ:
<Del_Accumulator W.a E.e>
где W.a - терм, E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Del_Accumulator - вспомогательная функция для функции Map_Accumulator (удаляет аккумулятор Wa из возвращаемого выражения WaEe функции Map_Accumulator).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕРЫ:
<Del_Accumulator (1)> -->
<Del_Accumulator (1 6) (1) (3)> --> (1) (3)
ВЫЗОВ:
<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 возвращает основной символ для разделения уровней папок в строке пути в текущей среде.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.d
где S.d - символ-литера:
ПРИМЕРЫ:
Среда Windows
<Directory_Separator> --> '\\'
Среда POSIX
<Directory_Separator> --> '/'
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<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 (E.E1) E.E2>
где E.E1 и E.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от div только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в div, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<divn () 3> -->
ВЫЗОВ:
<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 (E.E1) E.E2>
где E.E1 и E.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от dr только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в dr, только нулевой результат выдается в виде пустого выражения.
ПРИМЕРЫ:
<drn (10) 5> --> 2 ()
<drn () 3> --> ()
ВЫЗОВ:
<Empty E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Empty возвращает пустое выражение.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕРЫ:
<Empty > -->
<Empty 'd' 0 ()> -->
ВЫЗОВ:
<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 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 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 V.n>
где V.n - целое число в виде одной макроцифры (возможно, со знаком) в диапазоне от -2147483648 до 2147483647.
ОПИСАНИЕ:
Функция exit заврешает программу с кодом состояния завершения V.n.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕРЫ:
<exit 0> -->
<exit 1> -->
<exit '-' 1> -->
ВЫЗОВ:
<fclose S.n>
где S.n - номер файла (макроцифра от 0 до 9).
ОПИСАНИЕ:
Эта функция закрывает файл с заданным номером.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
где E.e - выражение:
ПРИМЕРЫ:
<fclose 3> -->
Закрытие файла завершилось с ошибкой
<fclose 3> --> 'описание кода ошибки'
Файл не открыт
<fclose 3> --> &NULL
ВЫЗОВ:
<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 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 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 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 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 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 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 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 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 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 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 S.n>
где S.n - номер файла (макроцифра от 0 до 9).
ОПИСАНИЕ:
Эта функция возвращает текущее положение указателя файла.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: V.e
где V.e - выражение:
ПРИМЕРЫ:
<ftell 3> --> 0
Возвращение текущего положения указателя файла завершилось с ошибкой
<ftell 3> --> 'описание кода ошибки'
Файл не открыт
<ftell 3> --> &NULL
ВЫЗОВ:
<ftochar F.x>
где F.x - символ-метка.
ОПИСАНИЕ:
Эта функция превращает символ-метку в цепочку объектных символов, которая является именем символа-метки.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом замены является цепочка объектных символов, являющаяся именем символа F.x.
ПРИМЕРЫ:
<ftochar &assa3434> --> 'ASSA3434'
<ftochar &ABCD> --> 'ABCD'
ВЫЗОВ:
<functab F.x>
где F.x - символ-метка.
ОПИСАНИЕ:
В некоторых случаях требуется, чтобы символ-метка, создаваемый из некоторой цепочки литер заведомо совпадал с символом-меткой, определенным в РефалАБ-программе и имеющим имя, полностью совпадающее с данной цепочкой литер. Это достигается с помощью функции functab, которая регистрирует в таблице символов, создаваемой функцией chartof, указанный символ-метку F.x. После этого, всякий раз, когда функция chartof будет получать цепочку литер, совпадающую с именем символа F.x, результатом функции chartof будет символ F.x.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
Пусть в РефалАБ-программе определена некоторая функция func1. Тогда
<functab &func1> -->
и в таблице символов функции chartof окажется зарегистрированным символ-метка &FUNC1.
ВЫЗОВ:
<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 (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
ВЫЗОВ:
<get_current_dir >
ОПИСАНИЕ:
Функция возвращает текущий рабочий каталог.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.r
где E.r - выражение из объектных символов, представляющее собой текущий рабочий каталог. Если невозможно получить текущий рабочий каталог, то E.r - пустое выражение.
ПРИМЕР:
<get_current_dir > --> 'текущий рабочий каталог'
ВЫЗОВ:
<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 возвращает максимальное значение макроцифры 4294967295.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Макроцифра 4294967295.
ПРИМЕР:
<Get_Max_Number> --> 4294967295
ВЫЗОВ:
<Get_Max_PathFileName>
ОПИСАНИЕ:
Функция Get_Max_PathFileName возвращает максимальную длину имени файла (возможно, с указанием пути) в текущей среде.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.n
где S.n - макроцифра:
ПРИМЕРЫ:
Среда Windows
<Get_Max_PathFileName> --> 260
Среда POSIX
<Get_Max_PathFileName> --> 4096
ВЫЗОВ:
<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 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 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 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 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 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 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 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 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 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*'
ВЫЗОВ:
<lengr E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция предназначена для вычисления длины аргумента, т.е. количества символов и скобок, составляющих E.e. При достижениии длины 4294967295, длина обнуляется.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: N.n E.e
где N.n - макроцифра, значение которой равно длине выражения E.e.
ПРИМЕР:
<lengr 'A' () ('A')> --> 6 'A' () ('A')
ВЫЗОВ:
<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 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 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 E.C>
где E.C - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция заменяет в выражении E.C все заглавные латинские символы-литеры строчными символами-литерами.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.n
где E.n - выражение E.C, в котором все заглавные латинские символы-литеры строчными символами-литерами.
ПРИМЕР:
<lower '>' 0 ('j') ('A')> --> '>' 0 ('j') ('a')
ВЫЗОВ:
<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')> --> '='
ВЫЗОВ:
<m1 N.n>
где N.n - макроцифра.
ОПИСАНИЕ:
Функция m1 производит вычитание единицы из макроцифры. Попытка вычесть единицу из макроцифры 0 приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: макроцифра, на единицу меньшая N.n.
ПРИМЕРЫ:
<m1 10> --> 9
<m1 738> --> 737
<m1 1> --> 0
ВЫЗОВ:
<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 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)
ВЫЗОВ:
<Max V.e>
где V.e - непустое произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция вычисляет максимальный терм нулевого уровня выражения V.e. Термы выражения сравниваются между собой лексикографически.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.m
где W.m - терм:
ПРИМЕРЫ:
<Max () 9 'fg'> --> ()
<Max 9> --> 9
ВЫЗОВ:
<Min V.e>
где V.e - непустое произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция вычисляет минимальный терм нулевого уровня выражения V.e. Термы выражения сравниваются между собой лексикографически.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: W.m
где W.m - терм:
ПРИМЕРЫ:
<Min () 9 'fg'> --> 'f'
<Min 9> --> 9
ВЫЗОВ:
<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 (E.E1) E.E2>
где E.E1 и E.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от mul только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в mul, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<muln () 3> -->
ВЫЗОВ:
<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> -->
ВЫЗОВ:
<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 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
ВЫЗОВ:
<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 N.n>
где N.n - макроцифра.
ОПИСАНИЕ:
Функция p1 производит прибавление единицы к макроцифре. Попытка прибавить единицу к макроцифре 4294967295 приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: макроцифра, на единицу большая N.n.
ПРИМЕРЫ:
<p1 10> --> 11
<p1 738> --> 739
ВЫЗОВ:
<Path_Separator>
ОПИСАНИЕ:
Функция Path_Separator возвращает символ разделения каталогов в переменной окружения PATH в текущей среде.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.p
где S.p - символ-литера:
ПРИМЕРЫ:
Среда Windows
<Path_Separator> --> ';'
Среда POSIX
<Path_Separator> --> ':'
ВЫЗОВ:
<Platform>
ОПИСАНИЕ:
Функция Platform возвращает текущую среду Windows или POSIX.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.p
где S.p - символ-метка:
ПРИМЕРЫ:
Среда Windows
<Platform> --> &WINDOWS
Среда POSIX
<Platform> --> &POSIX
ВЫЗОВ:
<print E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
В результате выполнения функции print в стандартный выходной поток (обычно это экран дисплея, но средствами операционной системы можно переназначить его в некоторый файл), выводится выражение E.e. Если выражение не помещается в одной печатной строке, оно продолжается на следующих строках. В конце происходит переход на новую строку. При использовании функции print выражение E.e выводится следующим образом. Символы-литеры (объектные знаки) выводятся в виде соответствующих литер. Структурные скобки “(“ и “)” выводятся в виде литер “(“ и “)”. Составные символы печатаются в том же виде, как они изображаются в РефалАБ-программах, за исключением того, что в качестве ограничителей для символов-ссылок и нестандартных символов используется не “/”, а апостроф “’”. Символы-числа обрамляются апострофами “’”. Символы-метки выводятся в виде имени символа-метки, обрамленного апострофами “’”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<print 'function' (&f1)> --> 'function' (&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
function('F1')
ВЫЗОВ:
<printm E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции print. Только при использовании функции printm выражение выводится в том же виде, в котором оно записывается в исходных РефалАБ-программах. Единственное различие заключается в том, что при переходе на следующую строку не ставится признак продолжения “+”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<printm 'function' (&f1)> --> 'function' (&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'function'(&F1)
ВЫЗОВ:
<prints E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции print. Только при использовании функции prints символы выражения не обрамляются апострофами.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<prints 'function' (&f1)> --> 'function' (&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
function(F1)
ВЫЗОВ:
<prout Ee>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции print.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<prout 'this' (&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this('FUNC')
ВЫЗОВ:
<proutm E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции printm.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<proutm 'this' (&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'this'(&FUNC)
ВЫЗОВ:
<prouts Ee>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции prints.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<prouts 'this' (&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this(FUNC)
ВЫЗОВ:
<QSort E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция производит быструю сортировку термов нулевого уровня выражения E.e. Термы выражения сравниваются между собой лексикографически.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.s
где E.s - выражение:
ПРИМЕРЫ:
<QSort > -->
<Max 9 ('hg') 1 &Print ('j') &QSort 'h' ()> --> 'h' &QSort &Print 1 9 () ('hg') ('j')
<QSort 9> --> 9
ВЫЗОВ:
<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 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 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 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 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 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 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
ВЫЗОВ:
<step >
ОПИСАНИЕ:
Функция возвращает количество завершенных шагов процесса. Точнее, значение поля step текущего процесса (п. 3.8, п. 3.11).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: S.n
где S.n - макроцифра.
ПРИМЕР:
<step > --> количество завершенных шагов процесса
ВЫЗОВ:
<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 (E.E1) E.E2>
где E.E1 и E.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от sub только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в sub, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<subn (0) > -->
ВЫЗОВ:
<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 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 возвращает текущую дату и время в локали операционной системы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Цепочка символов-литер, представляющая текущую дату и время в локали операционной системы. Пусто, если строка, представляющая текущую дату и время пустая или возникла ошибка при формировании строки. Символ-метка &NULL, если текущую дату и время в локали операционной системы невозможно определить.
ПРИМЕР:
<time> --> 'текущая дата и время в локали операционной системы'
ВЫЗОВ:
<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> --> '00:00:00.0000022100'
ВЫЗОВ:
<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 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 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 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 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 ()
ВЫЗОВ:
<upper E.c>
где E.c - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция заменяет в выражении E.c все строчные латинские символы-литеры заглавными символами-литерами.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.N
где E.N - выражение E.c, в котором все строчные латинские символы-литеры заменены заглавными символами-литерами.
ПРИМЕР:
<upper '>' 0 ('j') ('A')> --> '>' 0 ('J') ('A')
ВЫЗОВ:
<write E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична print. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<write 'function'(&f1)> --> 'function'(&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
function('F1')
ВЫЗОВ:
<writem E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична printm. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<writem 'function'(&f1)> --> 'function'(&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'function'(&F1)
ВЫЗОВ:
<writes E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична prints. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
ПРИМЕР:
<writes 'function' (&f1)> --> 'function' (&F1)
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
function(F1)
ВЫЗОВ:
<wrout Ee>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична prout. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<wrout 'this'(&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this('FUNC')
ВЫЗОВ:
<wroutm E.e>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична proutm. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<wroutm 'this'(&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'this'(&FUNC)
ВЫЗОВ:
<wrouts Ee>
где E.e - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична prouts. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<wrouts 'this' (&func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this(FUNC)
Здесь представлены описания пустых функций, расположенных в алфавитном порядке. Для каждой пустой функции приводится символ-метка, описание и пример.
СИМВОЛ-МЕТКА:
&BEGIN
ОПИСАНИЕ:
Является символом-меткой, представляющим начало чего-то, например начало файла.
ПРИМЕР:
<fseek 3 5 &Begin> -->
СИМВОЛ-МЕТКА:
&BRACKETS
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Brackets.
ПРИМЕР:
поле памяти:
Ex &Brackets E._ = &True
E._ = &False
<Ex <Type ()>> --> &True
<Ex <Type 9>> --> &False
СИМВОЛ-МЕТКА:
&CHAR
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Char.
ПРИМЕР:
поле памяти:
Ex &Char E._ = &True
E._ = &False
<Ex <Type '9'>> --> &True
<Ex <Type 9>> --> &False
СИМВОЛ-МЕТКА:
&CUR
ОПИСАНИЕ:
Является символом-меткой, представляющим текущую позицию чего-то, например текущую позицию файла.
ПРИМЕР:
<fseek 3 5 &Cur> -->
СИМВОЛ-МЕТКА:
&DIGIT
ОПИСАНИЕ:
Является символом-меткой, представляющим подтип выражения - Digit.
ПРИМЕР:
поле памяти:
Ex E._ &Digit E.__ = &True
E._ = &False
<Ex <Type '9'>> --> &True
<Ex <Type 'a'>> --> &False
СИМВОЛ-МЕТКА:
&END
ОПИСАНИЕ:
Является символом-меткой, представляющим конец чего-то, например конец файла.
ПРИМЕР:
<fseek 3 '-' 5 &End> -->
СИМВОЛ-МЕТКА:
&FALSE
ОПИСАНИЕ:
Является символом-меткой, представляющим логическую ложь.
ПРИМЕР:
поле памяти:
Ex &False/ = 'False'
S._ = 'Not False'
<Ex &False> --> 'False'
<Ex 'f'> --> 'Not False'
СИМВОЛ-МЕТКА:
&FEOF
ОПИСАНИЕ:
Является символом-меткой, представляющим конец файла.
ПРИМЕР:
поле памяти:
Ex E._ &FEOF = &True
E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> &False
<Ex <FGetS 0>> --> &True
СИМВОЛ-МЕТКА:
&FERROR
ОПИСАНИЕ:
Является символом-меткой, представляющим ошибки в файле.
ПРИМЕР:
поле памяти:
Ex E._ &FError = &True
E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> &False
<Ex <FPutS 0>> --> &True
СИМВОЛ-МЕТКА:
&LABEL
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Label.
ПРИМЕР:
поле памяти:
Ex &Label E._ = &True
E._ = &False
<Ex <Type &Type>> --> &True
<Ex <Type 9>> --> &False
СИМВОЛ-МЕТКА:
&LATIN
ОПИСАНИЕ:
Является символом-меткой, представляющим подтип выражения - Latin.
ПРИМЕР:
поле памяти:
Ex E._ &Latin E.__ = &True
E._ = &False
<Ex <Type 'a'>> --> &True
<Ex <Type '9'>> --> &False
СИМВОЛ-МЕТКА:
&NULL
ОПИСАНИЕ:
Является символом-меткой, представляющим невалидный объект.
ПРИМЕР:
поле памяти:
Ex &NULL = &True
E._ = &False
<FOpen 'r' 0 'a.a'> -->
<Ex <FClose 0>> --> &False
<Ex <FClose 0>> --> &True
СИМВОЛ-МЕТКА:
&NUMBER
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Number.
ПРИМЕР:
поле памяти:
Ex &Number E._ = &True
E._ = &False
<Ex <Type '9'>> --> &False
<Ex <Type 9>> --> &True
СИМВОЛ-МЕТКА:
&OTHERT
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - OtherT.
ПРИМЕР:
поле памяти:
Ex &OtherT E._ = &True
E._ = &False
<Ex <Type '9'>> --> &False
<Ex &OtherT> --> &True
СИМВОЛ-МЕТКА:
&POSIX
ОПИСАНИЕ:
Функция Platform возвращает эту функцию в среде POSIX, применяется совместно с Platform и пустой функцией Windows для написания программ, по разному ведущих себя в средах Windows и POSIX.
ПРИМЕР:
Среда POSIX
поле памяти:
Ex &Windows = 'It is Windows'
&POSIX = 'It is POSIX'
<Ex <Platform>> --> 'It is POSIX'
СИМВОЛ-МЕТКА:
&REFERENCE
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Reference.
ПРИМЕР:
поле памяти:
Ex &Reference E._ = &True
E._ = &False
<Ex <Type <New>>> --> &True
<Ex <Type 9>> --> &False
СИМВОЛ-МЕТКА:
&STDERR
ОПИСАНИЕ:
Является символом-меткой, представляющим стандартный поток вывода ошибки.
ПРИМЕР:
<FPutS &StdErr 'string'> -->
и на экране появится:
string
СИМВОЛ-МЕТКА:
&STDIN
ОПИСАНИЕ:
Является символом-меткой, представляющим стандартный входной поток.
ПРИМЕР:
<FGetS &StdIn> --> 'эта строка введена с клавиатуры'
СИМВОЛ-МЕТКА:
&STDOUT
ОПИСАНИЕ:
Является символом-меткой, представляющим стандартный выходной поток.
ПРИМЕР:
<FPutS &StdOut 'string'> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
string
СИМВОЛ-МЕТКА:
&TRUE
ОПИСАНИЕ:
Является символом-меткой, представляющим логическую истину.
ПРИМЕР:
поле памяти:
Ex &True = 'True'
S._ = 'Not True'
<Ex &True> --> 'True'
<Ex 'f'> --> 'Not True'
СИМВОЛ-МЕТКА:
&VOID
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Void.
ПРИМЕР:
поле памяти:
Ex &Void = &True
E._ = &False
<Ex <Type >> --> &True
<Ex <Type 9>> --> &False
СИМВОЛ-МЕТКА:
&WINDOWS
ОПИСАНИЕ:
Функция Platform возвращает эту функцию в среде Windows, применяется совместно с Platform и пустой функцией POSIX для написания программ, по разному ведущих себя в средах Windows и POSIX.
ПРИМЕР:
Среда Windows
поле памяти:
Ex &Windows = 'It is Windows'
&POSIX = 'It is POSIX'
<Ex <Platform>> --> 'It is Windows'
Здесь представлены описания спецификаторов, расположенных в алфавитном порядке. Для каждого спецификатора приводится имя, описание и пример.
ИМЯ:
: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 - символы-метки &FEOF (конец файла) и &FError (ошибки в файле).
ПРИМЕР:
поле памяти:
IsEOF S(:EOF:)._ = &True
S._ = &False
<IsEOF &FEOF> --> &TRUE
<IsEOF &FError> --> &TRUE
<IsFEOF 'r'> --> &FALSE
ИМЯ:
: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 определяет максимальную длину имени файла (возможно, с указанием пути) в текущей среде. Максимальная длина имени файла:
ПРИМЕРЫ:
Среда 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 определяет номера файлов от 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 определяет множество пробелов. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.
ПРИМЕР:
поле памяти:
Is_White_Space S(:White_Spaces:)._ = &True
S._ = &False
<Is_White_Space '\t'> --> &TRUE
<Is_White_Space 'r'> --> &FALSE