В состав языка программирования РефалАБ входит набор функций и спецификаторов, которые могут быть использованы в РефалАБ-программах в качестве внешних. Эти функции и спецификаторы хранятся в библиотеке объектных модулей, входящей в состав РефалАБ-системы.
Чтобы использовать любую из этих функций или спецификаторов в программе, написанной на РефалАБ, необходимо объявить ее внешней в соответствующем модуле с помощью директивы EXTERN.
Часть библиотечных функций, часть библиотечных пустых функций и спецификаторы написаны на РефалАБ. Остальные библиотечные функции, включая пустые, реализованы на языке Си и являются первичными.
Функции ввода-вывода предназначены для организации простейшего диалогового взаимодействия между пользователем и программой. Такими функциями являются:
Функции Print, Prout, Prints, Prouts, Printm, Proutm, Write, Wrout, Writes, Wrouts, Writem и Wroutm различаются возвращаемым в поле зрения значением, способом представления информации на экране и переходом в конце на новую строку.
Ввод и вывод может быть переназначен в произвольный файл средствами операционной системы.
Функции арифметики работают с целыми числами. Целое число - это последовательность макроцифр (т.е. “цифр” в позиционной системе счисления по основанию 232), которой может предшествовать символ знака ‘+’ или ‘-‘. Примерами целых чисел являются:
'+' 14
545
'-' 8
1 0 - значение этого числа равно 2³²=4294967296
'-' 3 2035 - значение этого числа равно -12884903923
0
0 1
Целое число нуль представляется либо цепочкой макроцифр 0, либо пустым выражением.
Существует нормализованное представление целого числа. То есть, если целое число положительное, знак ‘+’ не ставится. Убираются все стоящие вначале макроцифры 0. Нулевое число выдается в виде макроцифры 0.
Для каждого целого числа существует единственное нормализованное представление.
Все функции арифметики, кроме P1 и M1, допускают использование пустого выражения в качестве аргумента и воспринимают его как нуль. При этом, некоторые функции выдают нулевой результат работы в виде макроцифры 0, а некоторые - в виде пустого выражения, т.к. в некоторых случаях это удобно.
К функциям арифметики относятся:
Отдельно стоящими функциями являются:
Также в библиотеке есть спецификатор Max_Number - максимальное значение макроцифры.
В РефалАБ используются две группы функций битовых операций:
Битовые операции в РефалАБ не используют дополнительный код для отрицательных чисел. Знак числа обрабатывается отдельно как логический бит.
Группа функций битовых операций над целыми числами:
Битовый массив представляется непустой последовательностью макроцифр. Старшая макроцифра находится слева. Длина массива в битах равна количеству макроцифр, умноженному на 32.
Группа функций битовых операций над битовыми массивами фиксированной длины:
В РефалАБ используются два вида сравнения:
Поэтому в библиотеке РефалАБ функции сравнения делятся на две группы в зависимости от вида сравнения.
Группа функций сравнения целых чисел:
Группа функций лексикографического сравнения выражений:
В библиотеке РефалАБ есть функции булевой логики:
Также в библиотеке РефалАБ есть пустые функции:
В библиотеке есть спецификатор Bool - логический тип.
Множество в РефалАБ - это выражение из конечного набора уникальных элементов (может быть пустое).
В РефалАБ используются два вида множеств: множество целых чисел (в нормализованной форме) и множество термов нулевого уровня. Поэтому в библиотеке РефалАБ функции для работы с множествами делятся на две группы в зависимости от вида множества.
Группа функций для работы с множествами целых чисел:
Группа функций для работы с множествами термов нулевого уровня:
Стандартная библиотека РефалАБ содержит ряд функций, полезных при выполнении лексического анализа в трансляторах, системах естественноязыкового общения, языковых конверторах и т.д. Такими функциями являются:
Также есть пустые функции:
Для преобразования целых чисел в символьный вид и обратно используются следующие функции:
Также в библиотеке есть спецификатор White_Spaces - множество пробелов.
РефалАБ поддерживает работу с файлами больше 2Гб.
К этим функциям относятся следующие функции:
Функции Fopen, Load_File, Save_File, Append_File, Load_FBytes, Save_FBytes, Append_FBytes связывают с заданным именем файла определенный номер (число от 0 до 4294967295). Для выполнения какой-либо операции с файлом с помощью функций 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)
Библиотека РефалАБ содержит следующие функции высшего порядка:
В библиотеке есть функции и спецификаторы, специфичные для сред Windows и POSIX. Т.е. возвращаемые выражения этих функций и множества спецификаторов различны для сред Windows и POSIX. Они применяются для написания программ, по разному ведущих себя в средах Windows и POSIX.
Такими функциями являются:
Также есть пустые функции:
Специфичными спецификаторами являются:
В библиотеке РефалАБ присутствуют следующие системные функции:
Отдельно стоящей функцией является Step - возвращает количество завершенных шагов процесса.
В РефалАБ для генерации случайных чисел используется метод Фибоначчи с запаздываниями 97 и 33.
В библиотеке РефалАБ присутствуют следующие функции для работы со случайными числами:
Функция Eval позволяет писать программы, вычисляющие ленивые выражения, т.е. выражения, вычисление которых отложено до момента, когда их результат действительно нужен.
Функция Eval рекурсивно обходит произвольное выражение, поданное на вход, и ищет в нём все структурные термы вида (Call e.C), где Call - пустая функция. Каждый найденный структурный терм (Call e.C) превращается в результат вычисления функционального терма < e.C>. Обработка происходит в порядке, принятом в РефалАБ: вначале самые глубокие скобки, потом внешние, и слева направо. Результатом работы функции Eval является выражение, полученное в результате обработки всех найденных структурных термов вида (Call e.C).
Пустая функция Call является меткой, обозначающей ленивое выражение. Структурный терм (Call e.C), где e.C - произвольное выражение, представляет собой ленивое выражение, вычисление которого отложено до момента обработки функцией Eval.
В библиотеке РефалАБ также присутствуют следующие пустые функции:
Здесь представлены описания функций, расположенных в алфавитном порядке. Для каждой функции приводится формат вызова (передаваемые аргументы), описание, возвращаемое значение и пример вызова функции в формате
<вызов функции> --> <результат замены>
ВЫЗОВ:
<Abs e.N>
где e.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Abs вычисляет модуль целого числа e.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Abs является модуль целого числа e.N. Результат в нормализованной форме.
ПРИМЕРЫ:
<Abs 1> --> 1
<Abs '-' 1> --> 1
ВЫЗОВ:
<Add (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Add предназначена для сложения двух целых чисел e.E1 и e.E2.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Add является целое число (сложение e.E1 и e.E2). Результат в нормализованной форме.
ПРИМЕРЫ:
<Add (1) 2> --> 3
<Add ( ) 2> --> 2
<Add (4294967295) 2> --> 1 1
ВЫЗОВ:
<Addn (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от Add только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в Add, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<Addn () > -->
ВЫЗОВ:
<And e.B>
где e.B - выражение (может быть пустое), состоящее из символов-меток True, False и таких структурных термов (e.E), что <Eval e.E> возвращает символ-метку True или False.
ОПИСАНИЕ:
Функция And выполняет логическую операцию И. Функция последовательно на нулевом уровне e.B проходит True. Если на нулевом уровне встречается структурный терм (e.E), то функция вызывает Eval для обработки e.E. <Eval e.E> должен вернуть True или False. Как только встречается False, функция игнорирует оставшуюся часть e.B, возвращая False. Дойдя до конца e.B, функция возвращает True.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T
где s.T - символ-метка:
s.T = False, если в e.B на нулевом уровне есть False; s.T = True, иначе.
ПРИМЕРЫ:
<And > --> True
<And True> --> True
<And False True> --> False
<And True True> --> True
<And True False> --> False
<And (True)> --> True
<And (False) True> --> False
<And (True) False> --> True
ВЫЗОВ:
<Append_FBytes s.N (e.F) e.B>
где s.N - номер файла (макроцифра); e.F - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX; e.B - выражение (может быть пустым), которое содержит только символы-литеры и макроцифры.
ОПИСАНИЕ:
Эта функция открывает файл на дозапись в уже существующий файл. Если файл не существует, то файл будет создан, и в него будет осуществляться обычная запись с самого начала. Далее функция записывает в конец файла байты e.B. При этом все символы-литеры в выражении e.B преобразуются в их 8-битные коды от 0 до 255, а макроцифры в выражении e.B преобразуются по модулю 256 в числа от 0 до 255. В конце работы функция закрывает файл.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: E.e
где e.E - выражение:
ПРИМЕРЫ:
<Append_FBytes 3 ('input.bin') 'n' 89> -->
и в конец файла допишутся байты 110 и 89
Файл 'input.bin' не может быть открыт
<Append_FBytes 3 ('input.bin') 'n' 89> --> 'описание кода ошибки' NULL
Файл с номером 3 уже открыт
<Append_FBytes 3 ('input.bin') 'n' 89> --> NULL
ВЫЗОВ:
<Append_File s.N (e.F) e.L>
где s.N - номер файла (макроцифра); 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
Файл с номером 3 уже открыт
<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')
ВЫЗОВ:
<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
ВЫЗОВ:
<Bit v.B (e.N)>
где v.B - беззнаковое целое число, состоящее из одной или двух макроцифр, кратное 32 и находящееся в диапазоне от 32 до 2v.B − 1 бит включительно, e.N - последовательность макроцифр (может быть пустая).
ОПИСАНИЕ:
Функция Bit формирует битовый массив длиной v.B бит из последовательности макроцифр e.N.
Если последовательность e.N содержит меньше макроцифр, чем требуется для представления битового массива длиной v.B, результат дополняется слева нулевыми макроцифрами.
Если последовательность e.N содержит больше макроцифр, чем требуется, лишние старшие макроцифры удаляются.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Последовательность из v.B/32 макроцифр.
ПРИМЕРЫ:
<Bit 32 ()> --> 0
<Bit 64 (1)> --> 0 1
<Bit 32 (1 2)> --> 2
<Bit 32 (1)> --> 1
ВЫЗОВ:
<Bitand (v.N1) v.N2>
где v.N1 и v.N2 — непустые последовательности макроцифр. Обе последовательности должны иметь одинаковую длину.
ОПИСАНИЕ:
Функция Bitand выполняет побитовое логическое И над двумя битовыми массивами v.N1 и v.N2 одинаковой фиксированной длины.
Каждая пара соответствующих макроцифр входных последовательностей обрабатывается независимо операцией побитового И.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Последовательность макроцифр той же длины, что и входные битовые массивы v.N1 и v.N2. Каждая макроцифра результата равна результату побитового И соответствующих макроцифр аргументов.
ПРИМЕРЫ:
<Bitand (1) 3> --> 1
<Bitand (2) 7> --> 2
<Bitand (1 1) 3 2> --> 1 0
ВЫЗОВ:
<Bitnot v.N>
где v.N — непустая последовательность макроцифр.
ОПИСАНИЕ:
Функция Bitnot выполняет побитовое отрицание битового массива v.N фиксированной длины.
Каждая макроцифра входной последовательности обрабатывается независимо операцией побитового отрицания.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Последовательность макроцифр той же длины, что и входной битовый массив v.N. Каждая макроцифра результата равна результату побитового отрицания соответствующей макроцифры аргумента.
ПРИМЕРЫ:
<Bitnot 0> --> 4294967295
<Bitnot 4294967295> --> 0
<Bitnot 1> --> 4294967294
<Bitnot 0 4294967295> --> 4294967295 0
ВЫЗОВ:
<Bitor (v.N1) v.N2>
где v.N1 и v.N2 — непустые последовательности макроцифр. Обе последовательности должны иметь одинаковую длину.
ОПИСАНИЕ:
Функция Bitor выполняет побитовое логическое ИЛИ над двумя битовыми массивами v.N1 и v.N2 одинаковой фиксированной длины.
Каждая пара соответствующих макроцифр входных последовательностей обрабатывается независимо операцией побитового ИЛИ.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Последовательность макроцифр той же длины, что и входные битовые массивы v.N1 и v.N2. Каждая макроцифра результата равна результату побитового ИЛИ соответствующих макроцифр аргументов.
ПРИМЕРЫ:
<Bitor (1) 3> --> 3
<Bitor (2) 7> --> 7
<Bitor (1 1) 3 2> --> 3 3
ВЫЗОВ:
<Bitrot (v.A) e.S>
где v.A - непустая последовательность макроцифр, e.S - целое число (возможно пустое).
ОПИСАНИЕ:
Функция Bitrot выполняет циклический битовый сдвиг битового массива v.A на e.S бит.
Если e.S положительное, сдвиг выполняется влево (в сторону старших битов). Если e.S отрицательное, сдвиг выполняется вправо (в сторону младших битов). Если e.S равно нулю, возвращается исходный массив без изменений.
При циклическом сдвиге биты не теряются. Биты, выходящие за пределы массива, появляются с противоположной стороны.
Если абсолютное значение e.S больше или равно длине массива в битах, выполняется сдвиг по модулю длины массива.
При циклическом сдвиге влево освободившиеся младшие биты заполняются старшими битами, вышедшими за пределы массива. При циклическом сдвиге вправо освободившиеся старшие биты заполняются младшими битами, вышедшими за пределы массива.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.R
где v.R - битовый массив той же длины, что и v.A, после выполнения циклического сдвига.
ПРИМЕРЫ:
<Bitrot (1 2 3) 32> --> 2 3 1
<Bitrot (1 2 3) '-' 32> --> 3 1 2
<Bitrot (1 2 3) 128> --> 2 3 1
<Bitrot (1 2 3) 1> --> 2 4 6
<Bitrot (0 1) '-' 1> --> 2147483648 0
ВЫЗОВ:
<Bitsh (v.A) e.S>
где v.A - непустая последовательность макроцифр, e.S - целое число (возможно пустое).
ОПИСАНИЕ:
Функция Bitsh выполняет битовый сдвиг битового массива v.A на e.S бит.
Если e.S положительное, сдвиг выполняется влево (в сторону старших битов). Если e.S отрицательное, сдвиг выполняется вправо (в сторону младших битов). Если e.S равно нулю, возвращается исходный массив без изменений.
Если абсолютное значение e.S больше или равно длине массива в битах, возвращается массив той же длины, заполненный нулями.
При сдвиге влево освободившиеся младшие биты заполняются нулями, старшие биты теряются. При сдвиге вправо освободившиеся старшие биты заполняются нулями, младшие биты теряются.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.R
где v.R - битовый массив той же длины, что и v.A, после выполнения сдвига.
ПРИМЕРЫ:
<Bitsh (1 2 3) 32> --> 2 3 0
<Bitsh (1 2 3) '-' 32> --> 0 1 2
<Bitsh (1 2 3) 0> --> 1 2 3
<Bitsh (1 2 3) 100> --> 0 0 0
<Bitsh (1 2 3) '-' 31> --> 0 2 4
ВЫЗОВ:
<Bitxor (v.N1) v.N2>
где v.N1 и v.N2 — непустые последовательности макроцифр. Обе последовательности должны иметь одинаковую длину.
ОПИСАНИЕ:
Функция Bitxor выполняет побитовое логическое исключающее ИЛИ над двумя битовыми массивами v.N1 и v.N2 одинаковой фиксированной длины.
Каждая пара соответствующих макроцифр входных последовательностей обрабатывается независимо операцией побитового исключающего ИЛИ.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Последовательность макроцифр той же длины, что и входные битовые массивы v.N1 и v.N2. Каждая макроцифра результата равна результату побитового исключающего ИЛИ соответствующих макроцифр аргументов.
ПРИМЕРЫ:
<Bitxor (1) 3> --> 2
<Bitxor (2) 7> --> 5
<Bitxor (1 1) 3 2> --> 2 3
ВЫЗОВ:
<Bnot E.n>
где e.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Bnot вычисляет целое число - побитовое отрицание целого числа e.N. Побитовое отрицание выполняется над макроцифрами числа e.N справа налево. Знак результирующего числа есть логическое отрицание над знаком числа e.N (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Bnot является целое число (побитовое отрицание e.N). Результат в нормализованной форме.
ПРИМЕРЫ:
<Bnot '-' 3> --> 4294967292
<Bnot 4294967295 4294967292> --> '-' 3
<Bnot 0> --> '-' 4294967295
ВЫЗОВ:
<Bor (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Bor вычисляет целое число - побитовое ИЛИ двух целых чисел e.E1 и e.E2. Побитовое ИЛИ выполняется над макроцифрами двух чисел попарно справа налево. Недостаюшие макроцифры для пар, если длина чисел в макроцифрах разная, считаются равными нулю. Знак результирующего числа есть логическое ИЛИ над знаками двух чисел (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Bor является целое число (побитовое ИЛИ e.E1 и e.E2). Результат в нормализованной форме.
ПРИМЕРЫ:
<Bor (1) '-' 2> --> '-' 3
<Bor ('-' 1 2) '-' 7> --> '-' 1 7
<Bor (2 1) 2> --> 2 3
ВЫЗОВ:
<Bxor (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Bxor вычисляет целое число - побитовое исключающее ИЛИ двух целых чисел e.E1 и e.E2. Побитовое исключающее ИЛИ выполняется над макроцифрами двух чисел попарно справа налево. Недостаюшие макроцифры для пар, если длина чисел в макроцифрах разная, считаются равными нулю. Знак результирующего числа есть логическое исключающее ИЛИ над знаками двух чисел (‘+’ = 0, ‘-‘ = 1). Для нуля знак считается ‘+’.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции bxor является целое число (побитовое исключающее ИЛИ e.E1 и e.E2). Результат в нормализованной форме.
ПРИМЕРЫ:
<Bxor (1) '-' 2> --> '-' 3
<Bxor ('-' 1 2) '-' 7> --> 1 5
<Bxor (1 2) 1 2> --> 0
ВЫЗОВ:
<Card e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Card дает возможность читать записи из стандартного входного потока. Обычно в качестве входного потока назначается ввод с клавиатуры, но он может быть переназначен в файл при запуске программы (в этом случае необходимо следить за соответствием количества вызовов функции Card и количества записей в файле, если записей меньше, чем вызовов, возможны непредсказуемые результаты).
Если e.E не пусто, то в начале работы функция выводит выражение e.E в стандартный выходной поток, как-будто она вызывает функцию
<Wrouts e.E>
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
После вызова функции Card программа переходит в состояние ожидания ввода строки. По окончании ввода (нажатии клавиши “Enter”) введенная строка и будет возвращаемым значением. Если в процессе ввода функция обнаружила в потоке EOF, то функция завершает работу и последний символ в возвращаемом выражении будет макроцифра 0.
ПРИМЕР:
Ввод пользователя: ABC [Нажатие Enter]
<Card > --> 'ABC'
ВЫЗОВ:
<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')
ВЫЗОВ:
<Clear_dir e.D>
где e.D - выражение из символов-литер, задаюшее имя каталога (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.
ОПИСАНИЕ:
Указанный каталог очищается от содержимого.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.R
где e.R - выражение из символов-литер:
ПРИМЕРЫ:
<Clear_dir 'dir'> -->
<Clear_dir 'd:\\test\\dir'> -->
<Clear_dir 'test/dir'> -->
Процесс очистки каталога 'dir' завершился с ошибкой
<Clear_dir 'dir'> --> 'имя_файла: описание кода ошибки'
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<Cvb e.D>
где e.D - цепочка символов-литер произвольной длины, являющаяся десятичной записью целого числа со знаком или без него. Пустое выражение эквивалентно нулю.
ОПИСАНИЕ:
Преобразует целое число e.D из символьного представления в цепочку макроцифр (возможно со знаком).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.N
где v.N - число в виде цепочки макроцифр. Результат в нормализованной форме.
ПРИМЕРЫ:
<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 единицы). Результат в нормализованной форме.
ПРИМЕРЫ:
<Dec '+' 1> --> 0
<Dec > --> '-' 1
<Dec '-' 4294967295> --> '-' 1 0
ВЫЗОВ:
<Del_left n.N e.E>
где n.N - макроцифра, а e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Del_left удаляет n.N-ый терм нулевого уровня выражения e.E от начала.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Если e.E представляет собой последовательность из менее, чем n.N термов, или n.N = 0, возникает авост “Отождествление невозможно”.
Если же длина e.E не меньше, чем n.N термов, результатом замены является
e.E1 e.E2
где e.E = e.E1 w.Wn e.E2, w.Wn - n.N-ый терм нулевого уровня выражения e.E от начала.
ПРИМЕРЫ:
<Del_left 1 (1)> -->
<Del_left 2 (1 6) (1) (3) 5> --> (1 6) (3) 5
ВЫЗОВ:
<Del_right n.N e.E>
где n.N - макроцифра, а e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Del_right удаляет n.N-ый терм нулевого уровня выражения e.E от конца.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Если e.E представляет собой последовательность из менее, чем n.N термов, или n.N = 0, возникает авост “Отождествление невозможно”.
Если же длина e.E не меньше, чем n.N термов, результатом замены является
e.E1 e.E2
где e.E = e.E1 w.Wn e.E2, w.Wn - n.N-ый терм нулевого уровня выражения e.E от конца.
ПРИМЕРЫ:
<Del_right 1 (1)> -->
<Del_right 2 (1 6) (1) (3) 5> --> (1 6) (1) 5
ВЫЗОВ:
<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. Используется алгоритм D Кнута. Попытка делить на ноль приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Целое число, представляющее собой неокругленное частное от деления e.E1 на e.E2. Результат в нормализованной форме.
ПРИМЕРЫ:
<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. Используется алгоритм D Кнута. Попытка делить на ноль приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.Q (e.R)
где e.Q (целое число) - частное от деления e.E1 на e.E2 , а e.R (целое число) - остаток. И частное, и остаток выдаются в нормализованной форме. Знаки чисел учитываются следующим образом: сначала производим деление, не обращая внимания на знаки, а затем частному и остатку приписываем такие знаки, чтобы выполнялось соотношение:
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 ()> -->
ВЫЗОВ:
<Eql (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Eql выполняет лексикографическую операцию ‘равно’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Eql ('a') 'a'> --> True ('a') 'a'
<Eql ('b') 'a'> --> False ('b') 'a'
<Eql ('a') 'b'> --> False ('a') 'b'
ВЫЗОВ:
<Eqn (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Eqn выполняет операцию ‘равно’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Eqn () > --> True ()
<Eqn (5) 3> --> False (5) 3
<Eqn (3) 5> --> False (3) 5
ВЫЗОВ:
<Eval e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Eval предназначена для вычисления ленивых выражений. Функция рекурсивно обходит выражение e.E и ищет в нём все структурные термы вида (Call e.C), где Call - пустая функция, а e.C - произвольное выражение. Каждый найденный структурный терм (Call e.C) превращается в результат вычисления функционального терма < e.C>.
Обработка происходит в порядке, принятом в РефалАБ: вначале самые глубокие скобки, потом внешние, и слева направо.
Если выражение e.E не содержит структурных термов вида (Call e.C), функция Eval возвращает выражение e.E без изменений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.R
где e.R - выражение, полученное из e.E в результате обработки всех структурных термов вида (Call e.C):
ПРИМЕРЫ:
<Eval > -->
<Eval 'ABC'> --> 'ABC'
<Eval (Call Add (1) 2)> --> 3
<Eval (Call Add (1) (Call Add (2) 3))> --> 6
<Eval 'A' ('B' (Call Add (1) 2) 'C') 'D'> --> 'A' ('B' 3 'C') 'D'
ВЫЗОВ:
<Existn (e.F) e.N>
где e.F - целое число (может быть пустое), e.N - последовательность целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Функция Existn проверяет, существует ли целое число e.F в последовательности целых чисел e.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.T
где v.T - непустое выражение:
ПРИМЕРЫ:
<Existn (1) (2) (1) (3)> --> True (1) (2) (1) (3)
<Existn (1) (2) (3)> --> False (1) (2) (3)
ВЫЗОВ:
<Existw w.S e.E>
где w.S - терм, e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Existw проверяет, существует ли терм w.S в выражении e.E на нулевом уровне.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.T
где v.T - символ-метка:
ПРИМЕРЫ:
<Existw 's' 's'> --> True 's' 's'
<Existw 's' 'r'> --> False 's' 'r'
ВЫЗОВ:
<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 - целое число в виде одной макроцифры (возможно, со знаком) в диапазоне от -4294967295 до 4294967295.
ОПИСАНИЕ:
Функция Exit заврешает программу с кодом состояния завершения v.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕРЫ:
<Exit 0> -->
<Exit 1> -->
<Exit '-' 1> -->
ВЫЗОВ:
<Fclose s.N>
где s.N - номер файла (макроцифра).
ОПИСАНИЕ:
Эта функция закрывает файл с заданным номером.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.E
где e.E - выражение:
ПРИМЕРЫ:
<Fclose 3> -->
Закрытие файла завершилось с ошибкой
<Fclose 3> --> 'описание кода ошибки'
Файл не открыт
<Fclose 3> --> NULL
ВЫЗОВ:
<Fgets s.N>
где s.N - номер файла (макроцифра) или стандартный входной поток (символ-метка 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 представляет собой последовательность из менее, чем n.N термов, возникает авост “Отождествление невозможно”.
Если же длина 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 0 'A'('B')'C'> --> ()'A'('B')'C'
ВЫЗОВ:
<FoldL w.C w.S 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 - терм:
ПРИМЕРЫ:
поле памяти: $FUNC Add1 { (e.E1) (e.E2) = (<Add (e.E1) e.E2>); }
<FoldL Add1 (1)> --> (1)
поле памяти: $FUNC 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 - терм:
ПРИМЕРЫ:
поле памяти: $FUNC Add1 { (e.E1) (e.E2) = (<Add (e.E1) e.E2>); }
<FoldR Add1 (1)> --> (1)
поле памяти: $FUNC 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 - номер файла (макроцифра), 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'> --> 'описание кода ошибки'
Файл с номером 3 уже открыт
<Fopen 'r'3'input.txt'> --> NULL
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<Fprint s.N e.E>
где s.N - номер файла (макроцифра) или стандартный выходной поток (символ-метка 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 - номер файла (макроцифра) или стандартный выходной поток (символ-метка 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 - номер файла (макроцифра) или стандартный выходной поток (символ-метка StdOut) или стандартный поток вывода ошибки (символ-метка StdErr), а e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции Fprint. Только при использовании функции Fprints символы выражения не обрамляются апострофами.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.R
где e.R - выражение:
ПРИМЕРЫ:
<Fprints 0 'function' (F1)> -->
и в файл запишется строка 'function(F1)'
Файл не открыт
<Fprints 0 'function' (F1)> --> NULL
ВЫЗОВ:
<Fputs s.N e.E>
где s.N - номер файла (макроцифра) или стандартный выходной поток (символ-метка 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 - номер файла (макроцифра), 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 - номер файла (макроцифра), v.N - целое число в виде одной или двух макроцифр (возможно, со знаком) в диапазоне от -263 до 263-1, s.F - символ-метка, определяющая начальную позицию.
Если s.F = Begin, то начальная позиция - начало файла.
Если s.F = End, то начальная позиция - конец файла.
Если s.F = Current, то начальная позиция - текущая позиция файлового указателя.
ОПИСАНИЕ:
Эта функция перемещает файловый указатель на определенное количество байт 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 - номер файла (макроцифра).
ОПИСАНИЕ:
Эта функция возвращает текущее положение указателя файла.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: 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 - номер файла (макроцифра), а 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 является положительное целое число, которое является наибольшим общим делителем чисел e.E1 и e.E2. Результат в нормализованной форме.
ПРИМЕРЫ:
<Gcd (6) 15> --> 3
<Gcd ('-' 6) 15> --> 3
<Gcd (15) 1> --> 1
<Gcd (15) 0> --> 15
<Gcd (15) > --> 15
ВЫЗОВ:
<Gel (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Gel выполняет лексикографическую операцию ‘больше или равно’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Gel ('b') 'a'> --> True ('b') 'a'
<Gel ('a') 'b'> --> False ('a') 'b'
<Gel ('a') 'a'> --> True ('a') 'a'
ВЫЗОВ:
<Gen (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Gen выполняет операцию ‘больше или равно’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Gen (5) 3> --> True (5) 3
<Gen (3) 5> --> False (3) 5
<Gen () > --> True ()
ВЫЗОВ:
<Get_char >
ОПИСАНИЕ:
Функция Get_char дает возможность читать символ из стандартного входного потока. Обычно в качестве входного потока назначается ввод с клавиатуры, но он может быть переназначен в файл при запуске программы (в этом случае необходимо следить за соответствием количества вызовов функции Get_char и количества символов в файле, если символов меньше, чем вызовов, возможны непредсказуемые результаты).
Особенности работы с буфером ввода:
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Возвращает первый доступный символ из буфера или первый символ только что введенной строки. Если в процессе ввода функция обнаружила в потоке EOF, то функция возвращает макроцифру 0.
ПРИМЕР:
Ввод пользователя: ABC [Нажатие Enter]
<Get_char > --> 'A'
<Get_char > --> 'B'
ВЫЗОВ:
<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
ВЫЗОВ:
<Gtl (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Gtl выполняет лексикографическую операцию ‘больше’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Gtl ('b') 'a'> --> True ('b') 'a'
<Gtl ('a') 'b'> --> False ('a') 'b'
<Gtl ('a') 'a'> --> False ('a') 'a'
ВЫЗОВ:
<Gtn (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Gtn выполняет операцию ‘больше’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Gtn (5) 3> --> True (5) 3
<Gtn (3) 5> --> False (3) 5
<Gtn () > --> False ()
ВЫЗОВ:
<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), что <Eval 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 и вызывает Eval для обработки e.Ei, возвращая результат. Если w.Bi = (e.E), то функция вызывает Eval для обработки e.E. <Eval e.E> должен вернуть True или False, и анализируется измененное w.Bi. Дойдя до конца v.C, функция вызывает Eval для обработки e.F, возвращая результат.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.R
где e.R - выражение, которое функция возвращает в результате вызова Eval для обработки e.Ei или e.F.
ПРИМЕРЫ:
<If (True 'g') ()> --> 'g'
<If (False 'g') ('f')> --> 'f'
<If ((True) 'g') ('f')> --> 'g'
<If ((False) 'g') ('f')> --> 'f'
<If (True (Call Add (1) 2)) ()> --> 3
<If (False) ((Call Add (1) 2))> --> 3
ВЫЗОВ:
<Inc e.N>
где e.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Inc производит прибавление единицы к целому числу e.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Inc является целое число (сложение e.N и 1). Результат в нормализованной форме.
ПРИМЕРЫ:
<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 - номер файла (макроцифра) или стандартный входной поток (символ-метка 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 - номер файла (макроцифра) или стандартный входной поток (символ-метка 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 - номер файла (макроцифра) или стандартный входной поток (символ-метка 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.
Если s.T = Latin, то подтип выражения - Latin.
Если s.T = Digit, то подтип выражения - Digit.
ОПИСАНИЕ:
Функция Is_Type определяет принадлежность выражения e.E к указанному типу или подтипу s.T. Тип выражения зависит от терма, с которого начинается выражение e.E. Типы выражения могут быть:
Если выражениие e.E начинается с символа-литеры, то выражение также может иметь один из двух подтипов:
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.P s.T e.E
где s.P - символ-метка:
ПРИМЕРЫ:
<Is_Type Void > --> True Void
<Is_Type Void '9'> --> False Void '9'
<Is_Type Number 9> --> True Number 9
<Is_Type Number '9'> --> False Number '9'
<Is_Type Char '9'> --> True Char '9'
<Is_Type Char 9> --> False Char 9
ВЫЗОВ:
<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 составляет не менее, чем 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 0 'A'('B')'C'> --> 'A'('B')'C'()
ВЫЗОВ:
<Left n.N e.E>
где n.N - макроцифра, а e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Left возвращает n.N-ый терм нулевого уровня выражения e.E от начала.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Если e.E представляет собой последовательность из менее, чем n.N термов, или n.N = 0, возникает авост “Отождествление невозможно”.
Если же длина e.E не меньше, чем n.N термов, результатом замены является n.N-ый терм нулевого уровня выражения e.E от начала.
ПРИМЕРЫ:
<Left 1 1> --> 1
<Left 2 (1 6) (1) (3)> --> (1)
ВЫЗОВ:
<Lel (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Lel выполняет лексикографическую операцию ‘меньше или равно’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Lel ('a') 'b'> --> True ('a') 'b'
<Lel ('b') 'a'> --> False ('b') 'a'
<Lel ('a') 'a'> --> True ('a') 'a'
ВЫЗОВ:
<Len (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Len выполняет операцию ‘меньше или равно’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Len (3) 5> --> True (3) 5
<Len (5) 3> --> False (5) 3
<Len () > --> True ()
ВЫЗОВ:
<Length e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция предназначена для вычисления длины аргумента, т.е. количества символов и скобок, составляющих e.E.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: w.L e.E
где w.L - либо макроцифра, значение которой равно длине выражения e.E, если длина не превышает 4294967295, либо (v.L), иначе, где v.L - длина выражения e.E из двух макроцифр.
ПРИМЕР:
<Length 'A' () ('A')> --> 6 'A' () ('A')
ВЫЗОВ:
<Lengthw E.e>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Lengthw выдает длину выражения, измеренную в термах, т.е. количество термов нулевого уровня, составляющих e.E.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: w.L e.E
где w.L - либо макроцифра, значение которой равно длине выражения e.E, если длина не превышает 4294967295, либо (v.L), иначе, где v.L - длина выражения e.E из двух макроцифр.
ПРИМЕРЫ:
<Lengthw 'A' () ('A')> --> 3 'A' () ('A')
<Lengthw > --> 0
ВЫЗОВ:
<Load_FBytes s.N e.F>
где s.N - номер файла (макроцифра); e.F - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.
ОПИСАНИЕ:
Эта функция открывает файл на чтение в бинарном режиме. Далее функция читает все байты из открытого файла. В конце работы функция закрывает файл.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.E
где v.E - выражение:
ПРИМЕРЫ:
<Load_FBytes 3 'input.bin'> --> байты FEOF
Файл 'input.bin' не может быть открыт
<Load_FBytes 3 'input.bin'> --> 'описание кода ошибки' NULL
Файл с номером 3 уже открыт
<Load_FBytes 3 'input.bin'> --> 'описание кода ошибки' NULL
ВЫЗОВ:
<Load_File s.N e.F>
где s.N - номер файла (макроцифра); e.F - выражение из символов-литер, представляющее собой имя файла (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.
ОПИСАНИЕ:
Эта функция открывает файл на чтение. Далее функция читает все строки из открытого файла. В конце работы функция закрывает файл.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.E
где v.E - выражение:
ПРИМЕРЫ:
<Load_File 3 'input.txt'> --> ('первая строка файла')...('последняя строка файла') FEOF
Файл 'input.txt' не может быть открыт
<Load_File 3 'input.txt'> --> 'описание кода ошибки' NULL
Файл с номером 3 уже открыт
<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 (e.E1) e.E2
где s.R - символ-литера:
ПРИМЕРЫ:
<Lrel ('ab') 'ab'> --> '=' ('ab') 'ab'
<Lrel ('ac') 'ab'> --> '>' ('ac') 'ab'
<Lrel ('abc') 'ab'> --> '>' ('abc') 'ab'
<Lrel ('a' 0) 'ab'> --> '>' ('a' 0) 'ab'
<Lrel ('ab') 'a' ()> --> '<' ('ab') 'a' ()
<Lrel ('a' ('a')) 'a' ('b')> --> '<' ('a' ('a')) 'a' ('b')
<Lrel ('a' ('b')) 'a' ('b')> --> '=' ('a' ('b')) 'a' ('b')
ВЫЗОВ:
<Ltl (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Ltl выполняет лексикографическую операцию ‘меньше’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Ltl ('a') 'b'> --> True ('a') 'b'
<Ltl ('b') 'a'> --> False ('b') 'a'
<Ltl ('a') 'a'> --> False ('a') 'a'
ВЫЗОВ:
<Ltn (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Ltn выполняет операцию ‘меньше’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Ltn (3) 5> --> True (3) 5
<Ltn (5) 3> --> False (5) 3
<Ltn () > --> False ()
ВЫЗОВ:
<M1 n.N>
где n.N - макроцифра.
ОПИСАНИЕ:
Функция M1 производит вычитание единицы из макроцифры. Попытка вычесть единицу из макроцифры 0 приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: макроцифра, на единицу меньшая n.N.
ПРИМЕРЫ:
<M1 10> --> 9
<M1 738> --> 737
<M1 1> --> 0
ВЫЗОВ:
<Make_dir e.D>
где e.D - выражение из символов-литер, представляющее собой имя каталога (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.
ОПИСАНИЕ:
Функция Make_dir создаёт каталог с именем e.D.
В среде POSIX каталог создаётся с правами доступа 0755 (rwxr-xr-x). В среде Windows права доступа определяются системой.
Функция создаёт только один уровень каталога. Родительский каталог должен существовать.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.E
где e.E - выражение из символов-литер:
ПРИМЕРЫ:
<Make_dir 'dir'> -->
Процесс создания каталога 'dir' завершился с ошибкой
<Make_dir 'dir'> --> 'описание кода ошибки'
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<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
где e.R - выражение:
ПРИМЕРЫ:
<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 - выражение:
ПРИМЕРЫ:
поле памяти: $FUNC Add1 { (e.E1) (e.E2) = (<Add (e.E1) e.E2>) (e.E1); }
<Map_Accumulator Add1 (1)> --> (1)
поле памяти: $FUNC Add1 { (e.E1) (e.E2) = (<Add (e.E1) e.E2>) (e.E1); }
<Map_Accumulator Add1 (1) (2) (1 3)> --> (1 6) (1) (3)
ВЫЗОВ:
<MaxN (e.F) e.T>
где e.F - целое число (может быть пустое), e.T - последовательность целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция вычисляет максимальное целое число в последовательности целых чисел аргумента.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.M
где v.M:
Результат в нормализованной форме.
ПРИМЕРЫ:
<MaxN () (1 0) (6)> --> 1 0
<MaxN (1 0)> --> 1 0
ВЫЗОВ:
<MaxW w.F e.T>
где w.F - терм, e.T - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция вычисляет максимальный терм нулевого уровня выражения w.F e.T. Термы выражения сравниваются между собой лексикографически.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: w.M
где w.M - терм:
ПРИМЕРЫ:
<MaxW () 9 'fg'> --> ()
<MaxW ()> --> ()
ВЫЗОВ:
<MinN (e.F) e.T>
где e.F - целое число (может быть пустое), e.T - последовательность целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция вычисляет минимальное целое число в последовательности целых чисел аргумента.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.M
где v.M:
Результат в нормализованной форме.
ПРИМЕРЫ:
<MinN () (1 0) (6)> --> 0
<MinN ()> --> 0
ВЫЗОВ:
<Minus e.N>
где e.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Minus изменяет знак целого числа e.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Minus является число e.N, но с измененным знаком. Результат в нормализованной форме.
ПРИМЕРЫ:
<Minus 1> --> '-' 1
<Minus '-' 1> --> 1
ВЫЗОВ:
<MinW w.F e.T>
где w.F - терм, e.T - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция вычисляет минимальный терм нулевого уровня выражения w.F e.T. Термы выражения сравниваются между собой лексикографически.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: w.M
где w.M - терм:
ПРИМЕРЫ:
<MinW () 9 'fg'> --> 'f'
<MinW 'f'> --> 'f'
ВЫЗОВ:
<Mod (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Mod предназначена для получения остатка целочисленного деления числа e.E1 на число e.E2. Используется алгоритм D Кнута. Попытка делить на ноль приводит к авосту “Отождествление невозможно”.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Целое число, представляющее собой остаток от деления e.E1 на e.E2. Результат в нормализованной форме.
ПРИМЕРЫ:
<Mod (5) 3> --> 2
<Mod (5) '-' 3> --> 2
<Mod ('-' 5) 3> --> '-' 2
<Mod ('-' 5) '-' 3> --> '-' 2
ВЫЗОВ:
<Modn (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Отличается от Mod только тем, что выдает нулевой результат в виде пустого выражения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Как в Mod, только нулевой результат выдается в виде пустого выражения.
ПРИМЕР:
<Modn () 3> -->
ВЫЗОВ:
<Mul (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Mul умножает целые числа e.E1 и e.E2.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Целое число (произведение e.E1 и e.E2). Результат в нормализованной форме.
ПРИМЕРЫ:
<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> -->
ВЫЗОВ:
<Ncheck e.N>
где e.N - целое число (может быть пустое).
ОПИСАНИЕ:
Функция Ncheck проверяет, что аргумент - целое число.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.N
ПРИМЕР:
<Ncheck 1> --> 1
ВЫЗОВ:
<Nel (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Функция Nel выполняет лексикограыическую операцию ‘не равно’ для двух выражений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Nel ('b') 'a'> --> True ('b') 'a'
<Nel ('a') 'b'> --> True ('a') 'b'
<Nel ('a') 'a'> --> False ('a') 'a'
ВЫЗОВ:
<Nen (e.E1) e.E2>
где e.E1 и e.E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
Функция Nen выполняет операцию ‘не равно’ для двух целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T (e.E1) e.E2
где s.T - символ-метка:
ПРИМЕРЫ:
<Nen (5) 3> --> True (5) 3
<Nen (3) 5> --> True (3) 5
<Nen () > --> False ()
ВЫЗОВ:
<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 s.B>
где s.B - символ-метка True или False.
ОПИСАНИЕ:
Функция Not выполняет логическую операцию отрицания.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T
где s.T - символ-метка:
ПРИМЕРЫ:
<Not False> --> True
<Not True> --> False
ВЫЗОВ:
<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 в виде макроцифры (возможно, со знаком). Результат в нормализованной форме.
ПРИМЕРЫ:
<Numb '1000'> --> 1000
<Numb '-4294967295'> --> '-' 4294967295
<Numb > --> 0
<Numb '0123'> --> 83
<Numb '+0xff'> --> 255
ВЫЗОВ:
<Or e.B>
где e.B - выражение (может быть пустое), состоящее из символов-меток True, False и таких структурных термов (e.E), что <Eval e.E> возвращает символ-метку True или False.
ОПИСАНИЕ:
Функция Or выполняет логическую операцию ИЛИ. Функция последовательно на нулевом уровне e.B проходит False. Если на нулевом уровне встречается структурный терм (e.E), то функция вызывает Eval для обработки e.E. <Eval e.E> должен вернуть True или False. Как только встречается True, функция игнорирует оставшуюся часть e.B, возвращая True. Дойдя до конца e.B, функция возвращает False.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: s.T
где s.T - символ-метка:
s.T = True, если в e.B на нулевом уровне есть True; s.T = False, иначе.
ПРИМЕРЫ:
<Or > --> False
<Or True> --> True
<Or False True> --> True
<Or False False> --> False
<Or True False> --> True
<Or (True)> --> True
<Or (False) True> --> True
<Or (False) False> --> False
ВЫЗОВ:
<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. Только при использовании функции выражение выводится в том же виде, в котором оно записывается в исходных РефалАБ-программах.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: 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 e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции Print.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Prout 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this('FUNC')
ВЫЗОВ:
<Proutm e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции Printm.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Proutm 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'this'(FUNC)
ВЫЗОВ:
<Prouts e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Аналогична функции Prints.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Prouts 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this(FUNC)
ВЫЗОВ:
<QSortN e.N>
где e.N - последовательность (может быть пустая) целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция производит быструю сортировку целых чисел последовательности e.N.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение:
ПРИМЕРЫ:
<QSortN > -->
<QSortN (9) () (1)> --> () (1) (9)
<QSortN (9)> --> (9)
ВЫЗОВ:
<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 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_dir e.D>
где e.D - выражение из символов-литер, задаюшее имя каталога (возможно, с указанием пути), не превышающее 260 символов в среде Windows или 4096 символов в среде POSIX.
ОПИСАНИЕ:
Указанный каталог удаляется. Каталог должен быть пуст.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.E
где e.E - выражение из символов-литер:
ПРИМЕРЫ:
<Remove_dir 'dir'> -->
<Remove_dir 'd:\\test\\dir'> -->
<Remove_dir 'test/dir'> -->
Процесс удаления каталога 'dir' завершился с ошибкой
<Remove_dir 'dir'> --> 'описание кода ошибки'
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<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'> --> 'описание кода ошибки'
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ВЫЗОВ:
<Reverse e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Reverse полностью инверсирует выражение e.E. То есть инверсирует выражение e.E на уровне термов нулевого уровня и любые скобочные термы внутри e.E.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Если e.E - пусто, то возвращает пустое выражение.
Если e.E - не пусто, то полностью инверсированное выражение e.E, т.е. инверсированы термы нулевого уровня выражения e.E и любые скобочные термы внутри e.E.
ПРИМЕРЫ:
<Reverse 1 2 3> --> 3 2 1
<Reverse 3 (1 6) (1)> --> (1) (6 1) 3
ВЫЗОВ:
<Reversew e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Reversew инверсирует выражение e.E на уровне термов нулевого уровня.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.R
где e.R - выражение:
ПРИМЕРЫ:
<Reversew 1 2 3> --> 3 2 1
<Reversew 3 (1 6) (1)> --> (1) (1 6) 3
ВЫЗОВ:
<Right n.N e.E>
где n.N - макроцифра, а e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Right возвращает n.N-ый терм нулевого уровня выражения e.E от конца.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Если e.E представляет собой последовательность из менее, чем n.N термов, или n.N = 0, возникает авост “Отождествление невозможно”.
Если же длина e.E не меньше, чем n.N термов, результатом замены является n.N-ый терм нулевого уровня выражения e.E от конца.
ПРИМЕРЫ:
<Right 1 1> --> 1
<Right 3 (1 6) (1) (3)> --> (1 6)
ВЫЗОВ:
<Save_FBytes s.N (e.F) e.B>
где s.N - номер файла (макроцифра); 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
Файл с номером 3 уже открыт
<Save_FBytes 3 ('input.bin') 'n' 89> --> NULL
ВЫЗОВ:
<Save_File s.N (e.F) e.L>
где s.N - номер файла (макроцифра); 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
Файл с номером 3 уже открыт
<Save_File 3 ('input.txt') ('first string') ('second string')> --> NULL
ВЫЗОВ:
<Setn e.N>
где e.N - последовательность (может быть пустая) целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция формирует множество целых чисел из последовательности целых чисел e.N. Т.е. это выражение e.N, но без повторяющихся целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение e.N, но без повторяющихся целых чисел. Целые числа представлены в нормализованной форме.
ПРИМЕРЫ:
<Setn (0) (0) (1)> --> (0) (1)
<Setn (0) (1)> --> (0) (1)
ВЫЗОВ:
<Setn_diff (e.N1) e.N2>
где e.N1 и e.N2 - последовательности (может быть пустые) целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция формирует множество-разность целых чисел из последовательностей целых чисел e.N1 и e.N2. Т.е. это выражение из целых чисел e.N1, которых нет в e.N2, и без повторяющихся чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение из целых чисел e.N1, которых нет в e.N2, и без повторяющихся чисел. Целые числа представлены в нормализованной форме.
ПРИМЕРЫ:
<Setn_diff ((0)) (1)> --> (0)
<Setn_diff ((0) (1)) (1)> --> (0)
ВЫЗОВ:
<Setn_intersect (e.N1) e.N2>
где e.N1 и e.N2 - последовательности (может быть пустые) целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция формирует множество-пересечение целых чисел из последовательностей целых чисел e.N1 и e.N2. Т.е. это выражение из общих целых чисел e.N1 и e.N2, но без повторяющихся чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение из общих целых чисел e.N1 и e.N2, но без повторяющихся чисел. Целые числа представлены в нормализованной форме.
ПРИМЕРЫ:
<Setn_intersect ((0)) (1)> -->
<Setn_intersect ((0) (1)) (1)> --> (1)
ВЫЗОВ:
<Setn_union (e.N1) e.N2>
где e.N1 и e.N2 - последовательности (может быть пустые) целых чисел (может быть пустые) в структурных скобках.
ОПИСАНИЕ:
Эта функция формирует множество-объединение целых чисел из последовательностей целых чисел e.N1 и e.N2. Т.е. это выражение e.N1 e.N2, но без повторяющихся целых чисел.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение e.N1 e.N2, но без повторяющихся целых чисел. Целые числа представлены в нормализованной форме.
ПРИМЕРЫ:
<Setn_union ((0) (0)) (1)> --> (0) (1)
<Setn_union ((0) (1)) (1)> --> (0) (1)
ВЫЗОВ:
<Setw e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Эта функция формирует множество термов нулевого уровня из выражения e.E. Т.е. это выражение e.E, но без повторяющихся термов нулевого уровня.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение e.E, но без повторяющихся термов нулевого уровня.
ПРИМЕРЫ:
<Setw 'w' (0) 1> --> 'w' (0) 1
<Setw 'w' (0) 1 (0)> --> 'w' (0) 1
ВЫЗОВ:
<Setw_diff (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Эта функция формирует множество-разность термов нулевого уровня из выражений e.E1 и e.E2. Т.е. это выражение из термов нулевого уровня e.E1, которых нет в e.E2, и без повторяющихся термов.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение из термов нулевого уровня e.E1, которых нет в e.E2, и без повторяющихся термов.
ПРИМЕРЫ:
<Setw_diff ('w' (0)) 1> --> 'w' (0)
<Setw_diff ('w' (0)) 1 (0)> --> 'w'
ВЫЗОВ:
<Setw_intersect (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Эта функция формирует множество-пересечение термов нулевого уровня из выражений e.E1 и e.E2. Т.е. это выражение из общих термов нулевого уровня e.E1 и e.E2, но без повторяющихся термов.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение из общих термов нулевого уровня e.E1 и e.E2, но без повторяющихся термов.
ПРИМЕРЫ:
<Setw_intersect ('w' (0)) 1> -->
<Setw_intersect ('w' (0)) 1 (0)> --> (0)
ВЫЗОВ:
<Setw_union (e.E1) e.E2>
где e.E1 и e.E2 - произвольные объектные выражения.
ОПИСАНИЕ:
Эта функция формирует множество-объединение термов нулевого уровня из выражений e.E1 и e.E2. Т.е. это выражение e.E1 e.E2, но без повторяющихся термов нулевого уровня.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.S
где e.S - выражение e.E1 e.E2, но без повторяющихся термов нулевого уровня.
ПРИМЕРЫ:
<Setw_union ('w' (0)) 1> --> 'w' (0) 1
<Setw_union ('w' (0)) 1 (0)> --> 'w' (0) 1
ВЫЗОВ:
<Shl (e.E) v.S>
где e.E - целое число (может быть пустое), v.S - целое число в виде одной или двух макроцифр в диапазоне от 0 до 264 − 1.
ОПИСАНИЕ:
Функция Shl вычисляет целое число - битовый сдвиг влево целого числа e.E на v.S бит. Макроцифры числа представляются как непрерывная цепочка бит, которая сдвигается влево на v.S бит, с заполнением нулей справа. Полученная цепочка бит и есть макроцифы результирующего числа. Знак результирующего числа совпадает со знаком числа e.E. По сути, битовый сдвиг влево есть быстрое целочисленное умножение числа e.E на 2v.S.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Shl является целое число (битовый сдвиг влево целого числа e.E на v.S бит). Результат в нормализованной форме.
ПРИМЕРЫ:
<Shl (5) 1> --> 10
<Shl ('-' 1 2) 33> --> '-' 2 4 0
<Shl (2) 31> --> 1 0
ВЫЗОВ:
<Shr (e.E) v.S>
где e.E - целое число (может быть пустое), v.S - целое число в виде одной или двух макроцифр в диапазоне от 0 до 264 − 1.
ОПИСАНИЕ:
Функция Shr вычисляет целое число - битовый сдвиг вправо целого числа e.E на v.S бит. Макроцифры числа представляются как непрерывная цепочка бит, которая сдвигается вправо на v.S бит, с заполнением нулей слева. Полученная цепочка бит и есть макроцифы результирующего числа. Знак результирующего числа совпадает со знаком числа e.E. По сути, битовый сдвиг вправо есть быстрое целочисленное деление числа e.E на 2v.S с округлением в меньшую сторону по модулю.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Результатом вызова функции Shr является целое число (битовый сдвиг вправо целого числа e.E на v.S бит). Результат в нормализованной форме.
ПРИМЕРЫ:
<Shr (5) 1> --> 2
<Shr ('-' 1 2) 2> --> '-' 1073741824
<Shr (1 2) 33> --> 0
ВЫЗОВ:
<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). Результат в нормализованной форме.
ПРИМЕРЫ:
<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 s.B e.N>
где s.B - система счисления 8 или 10 или 16, e.N - целое число в виде цепочки макроцифр (возможно, со знаком) (может быть пустое).
ОПИСАНИЕ:
Преобразует целое число, не превышающее по абсолютной величине 4294967295, в символьное представление в десятичной или восьмеричной или шестнадцатеричной форме.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: v.D
где v.D - цепочка символов-литер, являющаяся записью числа e.N в десятичной или восьмеричной или шестнадцатеричной системе счисления. Если число e.N положительно - знак ‘+’ в e.D не ставитcя. Нулевой результат изображается как ‘0’.
ПРИМЕРЫ:
<Symb 10 1000> --> '1000'
<Symb 10 '-' 4294967295> --> '-4294967295'
<Symb 10 > --> '0'
<Symb 16 0> --> '0x0'
<Symb 16 '+' 255> --> '0xFF'
<Symb 8 '-' 0 255> --> '-0377'
ВЫЗОВ:
<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'
ПРИМЕР:
поле памяти: $Func 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 ()
ВЫЗОВ:
<Unbrackets (e.E)>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция Unbrackets удаляет структурные скобки в структурном терме (e.E).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: e.E
ПРИМЕРЫ:
<Unbrackets ()> -->
<Unbrackets (1 6)> --> 1 6
ВЫЗОВ:
<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 e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична Prout. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Wrout 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this('FUNC')
ВЫЗОВ:
<Wroutm e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична Proutm. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Wroutm 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
'this'(FUNC)
ВЫЗОВ:
<Wrouts e.E>
где e.E - произвольное объектное выражение.
ОПИСАНИЕ:
Функция аналогична Prouts. Только в конце не происходит переход на новую строку.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто
ПРИМЕР:
<Wrouts 'this' (Func)> -->
и на экране (если вывод не переназначен в какой-либо другой файл при запуске данной программы) появится:
this(FUNC)
Здесь представлены описания пустых функций, расположенных в алфавитном порядке. Для каждой пустой функции приводится символ-метка, описание и пример.
СИМВОЛ-МЕТКА:
BEGIN
ОПИСАНИЕ:
Является символом-меткой, представляющим начало чего-то, например начало файла.
ПРИМЕР:
<Fseek 3 5 Begin> -->
СИМВОЛ-МЕТКА:
BRACKETS
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Brackets.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
Brackets e._ = True;
e._ = False;
}
<Ex <Type ()>> --> True
<Ex <Type 9>> --> False
СИМВОЛ-МЕТКА:
CALL
ОПИСАНИЕ:
Является символом-меткой, обозначающим ленивое выражение. Структурный терм (Call e.E), где e.E - произвольное объектное выражение, представляет собой ленивое выражение, вычисление которого отложено до момента обработки функцией Eval.
Функция Eval превращает структурный терм (Call e.E) в результат вычисления функционального терма < e.E>.
ПРИМЕРЫ:
<Eval (Call Add (1) 2)> --> 3
СИМВОЛ-МЕТКА:
CHAR
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Char.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
Char e._ = True;
e._ = False;
}
<Ex <Type '9'>> --> True
<Ex <Type 9>> --> False
СИМВОЛ-МЕТКА:
CURRENT
ОПИСАНИЕ:
Является символом-меткой, представляющим текущую позицию чего-то, например текущую позицию файла.
ПРИМЕР:
<Fseek 3 5 Current> -->
СИМВОЛ-МЕТКА:
DIGIT
ОПИСАНИЕ:
Является символом-меткой, представляющим подтип выражения - Digit.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
e._ Digit e.__ = True;
e._ = False;
}
<Ex <Type '9'>> --> True
<Ex <Type 'a'>> --> False
СИМВОЛ-МЕТКА:
END
ОПИСАНИЕ:
Является символом-меткой, представляющим конец чего-то, например конец файла.
ПРИМЕР:
<Fseek 3 '-' 5 End> -->
СИМВОЛ-МЕТКА:
FALSE
ОПИСАНИЕ:
Является символом-меткой, представляющим логическую ложь.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
False = 'False';
s._ = 'Not False';
}
<Ex False> --> 'False'
<Ex 'f'> --> 'Not False'
СИМВОЛ-МЕТКА:
FEOF
ОПИСАНИЕ:
Является символом-меткой, представляющим конец файла.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
e._ FEOF = True;
e._ = False;
}
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> False
<Ex <FGetS 0>> --> True
СИМВОЛ-МЕТКА:
FERROR
ОПИСАНИЕ:
Является символом-меткой, представляющим ошибки в файле.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
e._ FError = True;
e._ = False;
}
<FOpen 'r' 0 'a.a'> -->
<Ex <FGetS 0>> --> False
<Ex <FPutS 0>> --> True
СИМВОЛ-МЕТКА:
LABEL
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Label.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
Label e._ = True;
e._ = False;
}
<Ex <Type Type>> --> True
<Ex <Type 9>> --> False
СИМВОЛ-МЕТКА:
LATIN
ОПИСАНИЕ:
Является символом-меткой, представляющим подтип выражения - Latin.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
e._ Latin e.__ = True;
e._ = False;
}
<Ex <Type 'a'>> --> True
<Ex <Type '9'>> --> False
СИМВОЛ-МЕТКА:
NULL
ОПИСАНИЕ:
Является символом-меткой, представляющим невалидный объект.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
NULL = True;
e._ = False;
}
<FOpen 'r' 0 'a.a'> -->
<Ex <FClose 0>> --> False
<Ex <FClose 0>> --> True
СИМВОЛ-МЕТКА:
NUMBER
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Number.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
Number e._ = True;
e._ = False;
}
<Ex <Type '9'>> --> False
<Ex <Type 9>> --> True
СИМВОЛ-МЕТКА:
OTHERT
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - OtherT.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
OtherT e._ = True;
e._ = False;
}
<Ex <Type '9'>> --> False
<Ex OtherT> --> True
СИМВОЛ-МЕТКА:
POSIX
ОПИСАНИЕ:
Является символом-меткой, представляющим среду POSIX. Применяется совместно с Platform и пустой функцией Windows для написания программ, по разному ведущих себя в средах Windows и POSIX.
ПРИМЕР:
Среда POSIX
поле памяти:
$FUNC Ex
{
Windows = 'It is Windows';
POSIX = 'It is POSIX';
}
<Ex <Platform>> --> 'It is POSIX'
СИМВОЛ-МЕТКА:
REFERENCE
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Reference.
ПРИМЕР:
поле памяти:
$FUNC 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
ОПИСАНИЕ:
Является символом-меткой, представляющим логическую истину.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
True = 'True';
s._ = 'Not True';
}
<Ex True> --> 'True'
<Ex 'f'> --> 'Not True'
СИМВОЛ-МЕТКА:
VOID
ОПИСАНИЕ:
Является символом-меткой, представляющим тип выражения - Void.
ПРИМЕР:
поле памяти:
$FUNC Ex
{
Void = True;
e._ = False;
}
<Ex <Type >> --> True
<Ex <Type 9>> --> False
СИМВОЛ-МЕТКА:
WINDOWS
ОПИСАНИЕ:
Является символом-меткой, представляющим среду Windows. Применяется совместно с Platform и пустой функцией POSIX для написания программ, по разному ведущих себя в средах Windows и POSIX.
ПРИМЕР:
Среда Windows
поле памяти:
$FUNC Ex
{
Windows = 'It is Windows';
POSIX = 'It is POSIX';
}
<Ex <Platform>> --> 'It is Windows'
Здесь представлены описания спецификаторов, расположенных в алфавитном порядке. Для каждого спецификатора приводится имя, описание и пример.
ИМЯ:
:Bool:
ОПИСАНИЕ:
Спецификатор Bool определяет логический тип - символы-метки True (логическая истина) и False (логическая ложь).
ПРИМЕР:
поле памяти:
$FUNC IsBool
{
s(:Bool:)._ = True;
s._ = False;
}
<IsBool True> --> True
<IsBool False> --> True
<IsBool 'r'> --> False
ИМЯ:
:Directory_Separators:
ОПИСАНИЕ:
Спецификатор Directory_Separators определяет множество символов для разделения уровней папок в строке пути в текущей среде. Символы для разделения уровней папок в строке пути:
ПРИМЕРЫ:
Среда Windows
поле памяти:
$FUNC Is_Directory_Separator
{
s(:Directory_Separators:)._ = True;
s._ = False;
}
<Is_Directory_Separator '\\'> --> True
<Is_Directory_Separator '/'> --> True
<Is_Directory_Separator ';'> --> False
Среда POSIX
поле памяти:
$FUNC Is_Directory_Separator
{
s(:Directory_Separators:)._ = True;
s._ = False;
}
<Is_Directory_Separator '/'> --> True
<Is_Directory_Separator '\\'> --> False
ЗАМЕЧАНИЕ: обратный слэш изображается путем двукратного повторения.
ИМЯ:
:EOF:
ОПИСАНИЕ:
Спецификатор EOF определяет символы EOF - символы-метки FEOF (конец файла) и FError (ошибки в файле).
ПРИМЕР:
поле памяти:
$FUNC IsEOF
{
s(:EOF:)._ = True;
s._ = False;
}
<IsEOF FEOF> --> True
<IsEOF FError> --> True
<IsFEOF 'r'> --> False
ИМЯ:
:Max_Number:
ОПИСАНИЕ:
Спецификатор Max_Number определяет максимальное значение макроцифры 4294967295.
ПРИМЕР:
поле памяти:
$FUNC Is_Max_Number
{
s(:Max_Number:)._ = True;
s._ = False;
}
<Is_Max_Number 4294967295> --> True
<Is_Max_Number 7> --> False
ИМЯ:
:Max_PathFileName:
ОПИСАНИЕ:
Спецификатор Max_PathFileName определяет максимальную длину имени файла (возможно, с указанием пути) в текущей среде. Максимальная длина имени файла:
ПРИМЕРЫ:
Среда Windows
поле памяти:
$FUNC Is_Max_PathFileName
{
s(:Max_PathFileName:)._ = True;
s._ = False;
}
<Is_Max_PathFileName 260> --> True
<Is_Max_PathFileName 4096> --> False
Среда POSIX
поле памяти:
$FUNC Is_Max_PathFileName
{
s(:Max_PathFileName:)._ = True;
s._ = False;
}
<Is_Max_PathFileName 4096> --> True
<Is_Max_PathFileName 260> --> False
ИМЯ:
:White_Spaces:
ОПИСАНИЕ:
Спецификатор White_Spaces определяет множество пробелов. Пробелы - это ‘ ‘, ‘\n’, ‘\t’, ‘\v’, ‘\f’, ‘\r’.
ПРИМЕР:
поле памяти:
$FUNC Is_White_Space
{
s(:White_Spaces:)._ = True;
s._ = False;
}
<Is_White_Space '\t'> --> True
<Is_White_Space 'r'> --> False