                   2. Описание библиотеки функций

                              Введение

     В состав системы программирования РЕФАЛ-2 входит набор функций, ко-
торые могут быть использованы в РЕФАЛ-программах в качестве внешних. Эти
функции  именуются первичными и хранятся в библиотеке объектных модулей,
входящей в состав РЕФАЛ-системы. 
     Чтобы использовать любую из этих функций в программе, написанной на
РЕФАЛе,  необходимо  объявить  ее внешней в соответствующем модуле с по-
мощью директивы EXTRN.
     Часть библиотечных функций написана на РЕФАЛе и затем скомпилирова-
на в объектные модули с помощью РЕФАЛ-компилятора. Остальные функции ре-
ализованы на языке Си.
     С точки зрения пользователя РЕФАЛ-системы единственное отличие пер-
вичных функций от обычных,  написанных на РЕФАЛе, состоит в том, что об-
ращения к первичным функциям всегда полностью вычисляются  за  один  шаг
РЕФАЛ-машины (независимо от того, насколько длинная и сложная последова-
тельность действий при этом выполняется),  а также в том, что при выпол-
нении этих обращений может возникать побочный эффект,  т.е.  взаимодейс-
твие со средой,  внешней по отношению к  РЕФАЛ-машине.  В  частности,  с
помощью первичных функций реализуются операции ввода-вывода. Кроме того,
некоторые первичные функции могут менять состояние РЕФАЛ-машины.

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

     Функции ввода-вывода предназначены для организации простейшего диа-
логового взаимодействия между пользователем и программой. Такими функци-
ями являются:
   - card (для ввода строк с клавиатуры);
   - print (для вывода информации на экран дисплея);
   - prout (для вывода информации на экран дисплея);
   - printm (для вывода информации на экран дисплея);
   - proutm (для вывода информации на экран дисплея).
     Функции print,  prout,  printm и proutm различаются возвращаемым  в
поле зрения значением и способом представления информации на экране.
     Ввод и вывод может быть переназначен в произвольный файл средствами
операционной системы.

                        2.2. Функции арифметики

     Функции арифметики  работают  с  целыми числами.  Целое число - это
последовательность макроцифр (т.е.  "цифр" в позиционной системе счисле-
ния по основанию 224), которой может предшествовать символ знака. Приме-
рами целых чисел являются:
     '+' /14/
     /545/
     '-' /8/
     /1//0/       - значение этого числа равно 2**24=16777216
     '-'/3//2035/ - значение этого числа равно -50333683
     /0/
     Целое число  нуль представляется либо нулевой макроцифрой /0/, либо
пустым выражением.
     Все функции арифметики допускают использование пустого  выражения в
качестве аргумента и воспринимают его как нуль.
     К функциям арифметики относятся:
   - add (сложение);
   - mul (умножение);
   - sub (вычитание);
   - dr (деление нацело с остатком);
   - div (деление нацело);
   - p1 (прибавление единицы);
   - m1 (вычитание единицы);
   - nrel (сравнение целых чисел).
     Для преобразования целых чисел в символьный вид и обратно использу-
ются следующие функции:
   - symb (целое длиной не более одной макроцифры - в символьный вид);
   - cvd (целое любой длины - в символьный вид);
   - numb (последовательность символов - в целое длиной не  более  одной
     макроцифры);
   - cvb (последовательность символов - в целое любой длины).

                   2.3. Функции лексического анализа

     Стандартная библиотека  РЕФАЛа  содержит ряд функций,  полезных при
выполнении лексического анализа в трансляторах, системах естественноязы-
кового общения, языковых конверторах и т.д. Такими функциями являются:
   - first (предназначена для отщепления от начала выражения части, име-
     ющей указанную длину);
   - last (предназначена для отщепления от конца выражения части,  имею-
     щей указанную длину);
   - lengw (вычисляет длину аргумента,  измеренную в термах,  т.е. коли-
     чество термов нулевого уровня, составляющих аргумент);
   - lengr (вычисляет реальную длину аргумента, т.е. количество символов
     и скобок, составляющих аргумент);
   - multe (копирует (размножает) аргумент в заданном количестве экземп-
     ляров);
   - type (предназначена для распознавания типа терма,  с которого начи-
     нается выражение).

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

     Описываемые в этом разделе функции позволяют работать не  более чем
с десятью файлами одновременно.  При этом пять файлов доступны только на
чтение (они именуются "файлами чтения") и пять файлов - только на запись
(они именуются "файлами записи").
     Работа с  файлами  производится с помощью следующих первичных функ-
ций:
   - opnget (открыть файл чтения),
   - opnput (открыть файл записи),
   - libget (читать файл),
   - libput (записать в файл),
   - clsget (закрыть файл чтения),
   - clsput (закрыть файл записи),
   - renam  (переименовать/переместить файл),
   - unlnk  (удалить файл).
     Функции opnget  и  opnput связывают с заданным именем файла опреде-
ленный номер (число от 0 до 4).  Для выполнения  какой-либо  операции  с
файлом с помощью функций libget,  libput, clsget и clsput следует указы-
вать его номер,  помещая соответствующую макроцифру в аргументе (нулевой
номер можно не указывыть - он используется по умолчанию).

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

      Функция apply позволяет писать программы,  анализирующие аварийные
ситуации типа "отождествление невозможно" или "свободная память исчерпа-
на"  и  предпринимающие некоторые дальнейшие действия по обработке таких
ситуаций.
      Функция apply порождает новое поле зрения, помещает в него функци-
ональный  терм,  определенный в ее аргументе,  и пытается вычислить его.
Результат такой попытки возвращается в то поле зрения,  из которого была
вызвана apply.
     После того,  как результат замены сформирован,  дополнительное поле
зрения, созданное в результате обращения к apply, уничтожается.
     Можно обращаться к apply рекурсивно.  В этом случае образуется стек
из полей зрения, однако глубина  рекурсии  ограничена.  Увеличив  размер
системного стека, можно увеличить глубину вложенности apply.

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

     В некоторых случаях возникает необходимость превратить цепочку сим-
волов  в символ-метку или,  наоборот,  получить из символа-метки цепочку
символов,  составляющих его тело.  Например, из цепочки символов 'ABCDE'
построить  символ  /ABCDE/ или символ-метку /label/ превратить в цепочку
'label'. При этом должно выполняться следующее требование: если мы будем
превращать  одну  и ту же цепочку символов в символ-метку несколько раз,
то все созданные символы-метки должны быть равны друг  другу,  т.е.  яв-
ляться экземплярами одного и того же символа.
      Для создания  символов-меток  и обратного превращения их в цепочки
объектных символов используются функции ftochar, chartof и functab:
    - ftochar (превращает символ-метку в цепочку символов, которая явля-
      ется телом символа-метки);
    - chartof (превращает цепочку символов в символ-метку, имеющий тело,
      совпадающее с заданной цепочкой символов,  при этом одна и  та  же
      цепочка  символов превращается в один и тот же символ-метку,  т.е.
      не создается новый экземпляр символа-метки -  это  достигается  за
      счет того, что функция создает и поддерживает таблицу символов-ме-
      ток, порожденных ею из цепочек символов);
    - functab  (регистрирует  в  таблице символов,  создаваемой функцией
      chartof, указанный символ-метку - это требуется делать, если необ-
      ходимо, чтобы символ-метка, создаваемый из цепочки символов, заве-
      домо совпадал с символом-меткой, определенным в РЕФАЛ-программе.

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

     Библиотека функций содержит пять первичных функций для работы с ко-
пилкой:
   - br (закопать),
   - dg (выкопать),
   - cp (скопировать),
   - rp (заменить),
   - dgall (выкопать все).
     Подробное описание копилки и операций для работы с ней представлено
в 1 разделе.

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

     Средством РЕФАЛа, дающим возможность обрабатывать произвольные гра-
фы, являются статические и динамические ящики.
     Библиотека функций  содержит  шесть  первичных функций для работы с
ящиками:
   - new (создать новый ящик),
   - gtr (извлечь из ящика),
   - rdr (считать (скопировать) из ящика),
   - wtr (занести в ящик),
   - ptr (добавить в ящик),
   - swr (обменять с содержимым ящика).
     Подробное описание этих функций представлено в 1 разделе.

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

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

     Функция add.
ВЫЗОВ:       <add (E1) E2>
     где E1 и E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
     Функция add предназначена для сложения двух целых чисел E1 и E2.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Результатом вызова функции add является целое число. Если результат
положительный, то знак '+' не ставитcя.
ПРИМЕРЫ:
           <add (/1/) /2/>          -->     /3/
           <add (   ) /2/>          -->     /2/
           <add (/16777215/) /2/>   -->     /1//1/

     Функция apply.
ВЫЗОВ:       <apply E1>
     где E1 - произвольное выражение.
ОПИСАНИЕ:
     Выполнение этого вызова происходит следующим образом: создается но-
вое поле зрения, в которое помещается функциональный терм
     < E1>
     После этого  делается  попытка  вычислить этот функциональный терм.
Возможны три исхода этой попытки: нормальный останов, останов "отождест-
вление невозможно" и останов "свободная память исчерпана".  Затем форми-
руется соответствующий результат замены (возвращаемое значение) и допол-
нительное  поле  зрения,  созданное  в  результате  обращения  к  apply,
уничтожается. Можно обращаться к apply рекурсивно. В этом случае образу-
ется стек из полей зрения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     В случае нормального останова результатом замены будет выражение
     'N' E2
где E2 - результат вычисления терма < E1>.
     В случае  останова  "отождествление  невозможно" результатом замены
будет выражение
     'R' E3
где E3 - содержимое того функционального терма < E4>, попытка вычисления
которого привела к останову.  В случае останова "свободная память исчер-
пана" результатом замены будет выражение
     'S'
ПРИМЕР:
     Пусть в поле памяти имеется функция:
            rev  s1 s2  = s2 s1
Тогда
            <apply /rev/ 'ab'>  --> 'N' 'ba'
            <apply /rev/ 'abc'> --> 'R' /rev/'abc'

     Функция card.
ВЫЗОВ:       <card >
ОПИСАНИЕ:
     Машинная функция card дает возможность читать записи из стандартно-
го входного потока. Обычно в качестве входного потока назначается ввод с
клавиатуры,  но  он может быть переназначен в файл при запуске программы
(в этом случае необходимо следить за  соответствием  количества  вызовов
функции card и количества записей в файле,  если записей меньше, чем вы-
зовов, возможны непредсказуемые результаты).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     После вызова функции card программа переходит в  состояние ожидания
ввода  строки.  По  окончании  ввода (нажатии клавиши "Enter") введенная
строка и будет возвращаемым значением.
ПРИМЕР:
        <card >  -->  'эта строка введена с клавиатуры'

     Функция chartof.
ВЫЗОВ:       <chartof Ec>
     где Ec - цепочка символов.
ОПИСАНИЕ:
     Функция chartof превращает цепочку литер  в  символ-метку,  имеющий
тело,  совпадающее с заданной цепочкой литер.  Функция chartof создает и
поддерживает таблицу символов-меток,  порожденных ею из  цепочек  литер.
Если  цепочка литер встретилась в первый раз,  то создается пустая функ-
ция, имя которой является соответствующим символом-меткой. Если такая же
цепочка  литер встречается еще раз,  то новая функция не создается,  а в
качестве результата вырабатывается имя ранее созданной функции.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    /символ-метка/
ПРИМЕРЫ:
          <chartof 'assa3434'>  -->  /assa3434/
          <chartof 'ABCD'>      -->  /ABCD/

     Функция clsget.
ВЫЗОВ:       <clsget En>
     где En - номер файла (макроцифра от /0/ до /4/,  причем  /0/  можно
опускать).
ОПИСАНИЕ:
     Функция clsget предназначена для закрытия соответствующего
файла чтения после того, как работа с ним закончена.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:     пусто
ПРИМЕРЫ:
          <clsget /3/>   -->
          <clsget >      -->

     Функция clsput.
ВЫЗОВ:       <clsput En>
     где En - номер файла (макроцифра от /0/ до /4/,  причем  /0/  можно
опускать).
ОПИСАНИЕ:
     Функция clsput предназначена для  закрытия  соответствующего  файла
записи после того, как работа с ним закончена.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:      пусто
ПРИМЕРЫ:
          <clsput /3/>   -->
          <clsput >      -->

     Функция cvb.
ВЫЗОВ:       <cvb Ed>
     где Ed - цепочка символов-литер произвольной длины,  являющаяся де-
сятичной  записью целого числа со знаком или без него.  Пустое выражение
эквивалентно нулю.
ОПИСАНИЕ:
     Преобразует целое  число  Ed из символьного представления в цепочку
макроцифр.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   En - число в виде цепочки макроцифр.
ПРИМЕРЫ:
          <cvb >              -->    /0/
          <cvb '+025'>        -->    /25/
          <cvb '1000000000'>  -->    /59//10144256/

     Функция cvd.
ВЫЗОВ:       <cvd En>
     где En - целое число в виде цепочки макроцифр  (возможно,  со  зна-
ком).
ОПИСАНИЕ:
     Преобразует целое число из цепочки макроцифр в символьное представ-
ление.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Ed - цепочка символов-литер, являющаяся записью числа En в десятич-
ной системе счисления. Нулевой результат изображается как '0'.
ПРИМЕРЫ:
          <cvd '-'/59//10144256/>  -->  '-1000000000'
          <cvd >                   -->  '0'
          <cvd /0/>                -->  '0'

     Функция div.
ВЫЗОВ:       <div  ( E1 ) E2>
     где E1 и E2 - целые числа.
ОПИСАНИЕ:
     Функция div  предназначена  для  целочисленного деления числа E1 на
число E2.  Попытка делить на ноль приводит к авосту "отождествление  не-
возможно".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Целое число,  представляющее собой неокругленное частное от деления
E1 на E2.
ПРИМЕРЫ:
          <div (/5/) /3/>       -->  /1/
          <div (/5/) '-'/3/>    -->  '-'/1/
          <div ('-'/5/) /3/>    -->  '-'/1/
          <div ('-'/5/) '-'/3/> -->  /1/

     Функция dr.
ВЫЗОВ:       <dr ( E1 ) E2>
     где E1 и E2 - целые числа.
ОПИСАНИЕ:
     Функция dr предназначена для целочисленного деления с остатком чис-
ла E1 на число E2.  Попытка делить на ноль приводит к авосту  "отождест-
вление невозможно".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Eq (Er)
     где Eq  (целое  число) - частное от деления E1 на E2 ,  а Er (целое
число) - остаток.  И частное,  и остаток выдаются без незначащих нулей и
без знака '+'. Нулевые Eq и Er выдаются в виде макроцифры /0/. Знаки чи-
сел учитываются следующим образом:  сначала производим деление, не обра-
щая внимания на знаки, а затем частному и остатку приписываем такие зна-
ки, чтобы выполнялось соотношение:
          E1 = Eq * E2 + Er
т.е. частное положительно,  если знаки делимого и делителя совпадают,  и
отрицательно  в противном случае,  а не равный нулю остаток всегда имеет
знак делимого.
ПРИМЕРЫ:
          <dr (/5/) /3/>        -->  /1/ (/2/)
          <dr (/5/) '-'/3/ >    -->  '-'/1/ (/2/)
          <dr ('-'/5/) /3/>     -->  '-'/1/ ('-'/2/)
          <dr ('-'/5/) '-'/3/>  -->  /1/ ('-'/2/)

     Функция first.
ВЫЗОВ:       <first Nn Ee>
     где Nn - макроцифра, а Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     Эта функция предназначена для отщепления от начала выражения части,
имеющей указанную длину.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Если Ee представляет собой последовательность из менее, чем Nn тер-
мов, результатом замены является выражение:
          '*' Ee
     Если же длина Ee не меньше, чем Nn термов, результатом замены явля-
ется
           (E1) E2
где E1 и E2 - такие выражения,  что Ee = E1E2,  и при этом  E1  является
последовательностью ровно из Nn термов.
ПРИМЕРЫ:
          <first /2/ 'A'('B')'C'>  -->  ('A'('B')) 'C'
          <first /5/ 'A'('B')'C'>  -->  '*A'('B')'C'

     Функция ftochar.
ВЫЗОВ:       <ftochar Fx>
     где Fx - символ-метка.
ОПИСАНИЕ:
     Эта функция превращает символ-метку в цепочку  объектных  символов,
которая является телом символа-метки.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Результатом замены  является цепочка объектных символов, являющаяся
телом символа Fx.
ПРИМЕРЫ:
          <ftochar /assa3434/>  -->  'assa3434'
          <ftochar /ABCD/>      -->  'ABCD'

     Функция functab.
ВЫЗОВ:       <functab Fx>
     где Fx - символ-метка.
ОПИСАНИЕ:
     В некоторых случаях требуется,  чтобы символ-метка,  создаваемый из
некоторой цепочки литер заведомо совпадал с символом-меткой,  определен-
ным в РЕФАЛ-программе и имеющим тело, полностью совпадающее с данной це-
почкой литер. Это достигается с помощью функции functab, которая регист-
рирует  в  таблице  символов,  создаваемой  функцией chartof,  указанный
символ-метку Fx.  После этого,  всякий раз,  когда функция chartof будет
получать  цепочку  литер,  совпадающую  с телом символа Fx,  результатом
функции chartof будет символ Fx.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    пусто
ПРИМЕР:
     Пусть в РЕФАЛ-программе определена некоторая функция func1. Тогда
          <functab /func1/>  -->
и в таблице символов функции chartof окажется зарегистрированным символ-
метка /func1/.

     Функция last.
ВЫЗОВ:       <last Nn Ee>
     где Nn - макроцифра, Ee - произвольное выражение.
ОПИСАНИЕ:
     Эта функция предназначена для отщепления от конца выражения Ee час-
ти, имеющей указанную длину Nn.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Если Ee представляет собой последовательность из менее, чем Nn тер-
мов, результатом замены является
           Ee '*'
     Если же длина Ee составляет не менее,  чем Nn  термов,  результатом
замены является
           E1 (E2)
где E1 и E2 - такие выражения, что Ee = E1E2 и при этом E2 является пос-
ледовательностью ровно из Nn термов.
ПРИМЕРЫ:
          <last /2/ 'A'('B')'C'>  -->  'A'(('B')'C')
          <last /5/ 'A'('B')'C'>  -->  'A'('B')'C*'

     Функция lengr.
ВЫЗОВ:       <lengr Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     Эта функция предназначена для вычисления длины аргумента,  т.е. ко-
личества символов и скобок, составляющих Ee.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    Nn Ee
где Nn - макроцифра, значение которой равно длине выражения Ee.
ПРИМЕР:
         <lengr 'A' () ('A')> -->  /6/ 'A' () ('A')

     Функции lengw.
ВЫЗОВ:       <lengw Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     Функция lengw выдает длину выражения, измеренную в термах, т.е. ко-
личество термов нулевого уровня, составляющих Ee.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Nn Ee
     где Nn - макроцифра, которая равна длине выражения Ee.
ПРИМЕРЫ:
          <lengw 'A' () ('A')> -->  /3/ 'A' () ('A')
          <lengw >             -->  /0/

     Функция libget.
ВЫЗОВ:       <libget En>
     где En - номер файла (макроцифра от /0/ до /4/,  причем  /0/  можно
опускать).
ОПИСАНИЕ:
     Функция libget  читает очередную запись из предварительно открытого
с помощью функции opnget файла чтения с заданным номером. Попытка чтения
из неоткрытого файла приводит к авосту "отождествление невозможно" и вы-
даче сообщения "Unknown input file".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Пусто - если файл прочитан до конца, Er - очередная запись из файла
чтения в виде строки объектных символов,  если в файле еще остались неп-
рочитанные записи.
ПРИМЕР:
      <libget /3/>   -->   'это очередная прочитанная запись'
      <libget /3/>   -->   'это следующая запись из того же файла'

     Функция libput.
ВЫЗОВ:         <libput En Ee>
     где En  -  номер файла (макроцифра от /0/ до /4/,  причем /0/ можно
опускать),  а Ee - объектное выражение,  которое не  содержит  составных
символов.
ОПИСАНИЕ:
     Функция libput записывает в файл с заданным номером (предварительно
открытый с помощью функции opnput) очередную запись  Ee.  При  этом  все
структурные  скобки  в выражении Ee преобразуются в символы-литеры '(' и
')'. Ели аргумент Ee пуст, в файл добавляется пустая запись. Попытка за-
писи  в  неоткрытый файл приводит к авосту "отождествление невозможно" и
выдаче сообщения "Unknown output file".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   пусто
ПРИМЕР:
         <libput 'очередная запись'>   -->
и в конец файла допишется строка 'очередная запись'.

     Функция  mul.
ВЫЗОВ:       <mul (E1) E2>
     где E1 и E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
     Функция mul умножает целые числа E1 и E2.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   En - целое число (произведение).
ПРИМЕРЫ:
          <mul (/2/) '-'/2/>    -->  '-'/4/
          <mul (/2/)>           -->  /0/
          <mul (/4096/)/4096/>  -->  /1//0/

     Функция multe.
ВЫЗОВ:       <multe Nn Ee>
     где Nn - макроцифра, а Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     Эта функция  копирует  (размножает) выражение в заданном количестве
экземпляров.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Ee Ee ... Ee
     где выражение Ee повторяется Nn раз. В частности, если Nn равно ну-
лю, результатом замены является пустое выражение.
ПРИМЕРЫ:
          <multe /5/ 'A'>      -->  'AAAAA'
          <multe /2/ 'A'('B')> -->  'A'('B')'A'('B')
          <multe /0/>          -->

     Функция m1.
ВЫЗОВ:       <m1 Nn>
     где Nn - макроцифра.
ОПИСАНИЕ:
     Функция m1 производит вычитание единицы из макроцифры.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   макроцифра, на единицу меньшая Nn.
ПРИМЕРЫ:
          <m1 /10/>   -->  /9/
          <m1 /738/>  -->  /737/
          <m1 /1/>    -->  /0/

     Функция nrel.
ВЫЗОВ:       <nrel (E1) E2>
     где E1 и E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
     Функция nrel  предназначена для сравнения целых чисел с учетом зна-
ка.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    Sr (E1) E2
     где Sr - символ-литера:
          Sr = '>', если E1 > E2;
          Sr = '=', если E1 = E2;
          Sr = '<', если E1 < E2;
ПРИМЕРЫ:
          <nrel (/5/)/3/>        -->   '>' (/5/)/3/
          <nrel ('-'/5/)'-'/3/>  -->   '<' ('-'/5/)'-'/3/
          <nrel () /0//0/>       -->   '=' ()/0//0/

     Функция numb.
ВЫЗОВ:       <numb Ed>
     где Ed - цепочка символов-литер,  являющаяся десятичной записью це-
лого числа со знаком или без него, или пустое выражение.
ОПИСАНИЕ:
     Преобразует целое число из символьного представления  в макроцифру.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Nn - число Ed в виде макроцифры.
ПРИМЕРЫ:
          <numb '1000'>  -->   /1000/
          <numb >        -->   /0/
          <numb '+025'>  -->   /25/

     Функция opnget.
ВЫЗОВ:       <opnget En Ef>
     где En - номер файла (макроцифра от /0/ до /4/,  причем  /0/  можно
опускать), а Ef - объектное выражение, представляющее собой спецификацию
файла.
ОПИСАНИЕ:
     Эта функция открывает файл на чтение и связывает с ним заданный но-
мер.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   пусто
ПРИМЕРЫ:
          <opnget /3/'input.txt'>                -->
          <opnget 'c:\refal\examples\test.txt'>  -->

     Функция opnput.
ВЫЗОВ:       <opnput Ez En Ef>
     где En  -  номер файла (макроцифра от /0/ до /4/,  причем /0/ можно
опускать), а Ef - объектное выражение, представляющее собой спецификацию
файла. 
     Ez - это пусто или объектный символ '*', означающий что будет доза-
пись  в  уже  существующий  файл. Если файл не существует, то файл будет
создан, и в него будет осуществляться обычная запись с самого начала. 
ОПИСАНИЕ: 
     Эта  функция  открывает файл на запись (или дозапись) и связывает с
ним заданный номер. 
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто 
ПРИМЕРЫ: 
          <opnput /3/'output.txt'>                -->
          <opnput 'c:\refal\examples\test.txt'>   -->
          <opnput '*c:\refal\examples\test.txt'>  -->

     Функция print.
ВЫЗОВ:       <print Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     В результате выполнения функции print в стандартный  выходной поток
(обычно это экран дисплея,  но средствами операционной системы можно пе-
реназначить его в некоторый файл), начиная с новой строки, выводится вы-
ражение  Ee.  Если выражение не помещается в одной печатной строке,  оно
продолжается на следующих строках.  Печать пустого Ee  вызывает  пропуск
одной печатной строки.  При использовании функции print выражение Ee вы-
водится следующим образом.  Символы-литеры (объектные знаки) выводятся в
виде соответствующих литер. Структурные скобки "(" и ")" выводятся в ви-
де литер "(" и ")".  Составные символы печатаются в том же виде, как они
изображаются в РЕФАЛ-программах, за исключением того, что в качестве ог-
раничителей используется не "/", а апостроф "'".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Ee
ПРИМЕР:
         <print 'функция'(/f1/)>  -->  'функция'(/f1/)
и на экране (если вывод не переназначен в какой-либо другой файл при за-
пуске данной программы) появится:
         функция('f1')

     Функция  printm.
ВЫЗОВ:       <printm Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     При использовании функции printm выражение выводится в том же виде,
в  котором  оно  записывается в исходных РЕФАЛ-программах.  Единственное
различие заключается в том, что при переходе на следующую строку не ста-
вится признак продолжения "+".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   Ee
ПРИМЕР:
         <printm 'функция'(/f1/)>  -->  'функция'(/f1/)
и на экране (если вывод не переназначен в какой-либо другой файл при за-
пуске данной программы) появится:
         'функция'(/f1/)

     Функция prout.
ВЫЗОВ:      <prout Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     При использовании функции prout выражение Ee выводится точно так же
как и функцией print.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    пусто
ПРИМЕР:
         <prout 'это'(/func/)>  -->
и на экране (если вывод не переназначен в какой-либо другой файл при за-
пуске данной программы) появится:
         это('func')

     Функция proutm.
ВЫЗОВ:       <proutm Ee>
     где Ee - произвольное объектное выражение.
ОПИСАНИЕ:
     При использовании функции proutm выражение Ee выводится  точно  так
же как и функцией printm.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   пусто
ПРИМЕР:
         <proutm 'функция'(/f1/)>  -->
и на экране (если вывод не переназначен в какой-либо другой файл при за-
пуске данной программы) появится:
         'функция'(/f1/)

     Функция p1.
ВЫЗОВ:       <p1 Nn>
     где Nn - макроцифра.
ОПИСАНИЕ:
     Функция p1 производит прибавление единицы к макроцифре.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   макроцифра, на единицу большая Nn.
ПРИМЕРЫ:
          <p1 /10/>  -->  /11/
          <p1 /738/> -->  /739/
                                                            
     Функция renam.
ВЫЗОВ:         <renam Ee>
     где  Ee - объектное выражение, которое не содержит составных симво-
лов и представляет собой два имени файлов, разделенных пробелом. 
ОПИСАНИЕ: 
     Функция renam коптрует файл, заданный первым именем, в файл, задан-
ный вторым именем с уничтожением первого файла. Таким образом реализует-
мя  либо  переименование файла (если оба имени отсылают к одной и той же
директории), либо перемещение файла из одной директории в другую с сохо-
анением того же имени или с присвоением файлу другого имени.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:   пусто
ПРИМЕРЫ:
         <renam 'a.a b.b'>   -->
         <renam 'a:\\a.a b:\\a.a'>   -->
         <renam 'd:\\a\\a.a c:\\f1\\f1.1\\c.c'>   -->
ЗАМЕЧАНИЕ:  напоминаем, что обратный слэш изображается путем двукратного
повторения. 
     
     Функция sub.
ВЫЗОВ:       <sub (E1) E2>
     где E1 и E2 - целые числа (может быть пустые).
ОПИСАНИЕ:
     Функция sub предназначена для вычитания E2 из E1.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Результатом вызова функции sub является целое число. Если результат
положителен - знак '+' не ставитcя.
ПРИМЕРЫ:
           <sub (/1/) /2/>       -->    '-' /1/
           <sub (/2/) >          -->     /2/
           <sub (/1//1/) /2/>    -->     /16777215/

     Функция symb.
ВЫЗОВ:       <SYMB Nn>
     где Nn - целое число в виде макроцифры.
ОПИСАНИЕ:
     Преобразует целое число из макроцифры в символьное представление.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
     Ed - цепочка символов-литер, являющаяся записью числа Nn в десятич-
ной системе счисления. Нулевой результат изображается как '0'.
ПРИМЕРЫ:
          <symb /1000/>  -->  '1000'
          <symb >        -->  '0'
          <symb /0/>     -->  '0'

     Функция type.
ВЫЗОВ:       <type Ee>
где Ee  - произвольное объектное выражение.
ОПИСАНИЕ:
     Функция type предназначена для распознавания типа терма, с которого
начинается выражение.  Эта функция не дает никаких новых возможностей по
сравнению с теми, которые дает использование спецификаторов. Она включе-
на в библиотеку только для того, чтобы обеспечить совместимость с други-
ми реализациями РЕФАЛа, и имеет следующее описание:
          mtype start
                entry  type
          type  S(F)X E1 = 'F' SX E1
                S(N)X E1 = 'N' SX E1
                S(R)X E1 = 'R' SX E1
                S(L)X E1 = 'L' SX E1
                S(D)X E1 = 'D' SX E1
                S(O)X E1 = 'O' SX E1
                (EX) E1  = 'B' (EX) E1
                         = '*'
                end
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:    Sz Ee
     где Sz - это объектный символ, который равен:
        - 'F', если Ee начинается с символа-метки;
        - 'N', если Ee начинается с символа-числа (макроцифры);
        - 'R', если Ee начинается с символа-ссылки;
        - 'L', если Ee начинается с буквы (русской или латинской);
        - 'D', если Ee начинается с цифры;
        - 'O', если Ee начинается с символа-литеры (объектного знака);
        - 'B', если Ee начинается с терма вида (E1),
               где E1 - произвольное объектное выражение;
        - '*' в остальных случаях.
ПРИМЕРЫ:
          <type /f1/ 'aaa'>     -->  'F' /f1/ 'aaa'
          <type /%11111111/'a'> -->  'R'/%11111111/ 'a'
          <type 'aaa'>          -->  'L'  'aaa'
          <type '9aaa'>         -->  'D'  '9aaa'
          <type '-aaa'>         -->  'O'  '-aaa'
          <type ('aaa')>        -->  'B'  ('aaa')
          <type >               -->  '*'
           
     Функция unlnk.
ВЫЗОВ:       <unlnk Ee>
     где Ee - объектное выражение, задаюшее имя файла (возможно с указа-
нием пути).
ОПИСАНИЕ:
     Указанный файл (если он существует) удаляется.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: пусто.
ПРИМЕРЫ:
          <unlnk 'a.a'>  --> 
          <unlnk 'd:\\test\\a.a'>  --> 
ЗАМЕЧАНИЕ:  напоминаем, что обратный слэш изображается путем двукратного
повторения. 
     
