Выбрать главу

#(дл,А,В,Z) «Деление» (четыре аргумента). Значением функции является частное от деления числового значения аргумента А на числовое значение В, перед результатом помещается начальная часть А. Начальная часть В теряется. Выполняется целочисленное деление, у частного сохраняется только целая часть; остаток всегда неотрицателен. Если В имеет значение нуль, то значением функции будет аргумент Z в активном режиме независимо от режима вызова функции.

Аналогично арифметическим значениям в Траке функционируют логические значения. Логическим значением цепочки считается наиболее длинная ее правая часть, состоящая целиком из нулей и единиц, т. е. являющаяся двоичной цепочкой. Так, цепочка abc0100 имеет логическое значение 0100, цепочка 1234567890 — значение 0, цепочка 43210—10, а логическим значением abc является, по определению, пустая цепочка.

#(ло,А,В) «Логическое объединение» (три аргумента). Значением этой функции является побитовое логическое объединение Логических значений аргументов А и В. Если они имеют разные длины, то более короткое дополняется слева необходимым количеством нулей для уравнивания длин. Любые нелогические начальные части аргументов теряются.

#(лп,А,В) «Логическое пересечение» (три аргумента). Значением функции является побитовое логическое пересечение логических значений аргументов Л и В. Если аргументы имеют неравные длины, то более длинный усекается слева для выравнивания длин. Любые нелогические начальные части аргументов теряются.

#(лд,А) «Логическое дополнение» (два аргумента). Значение этой функции — побитовое логическое дополнение аргумента А, имеющее ту же длину. Нелогическая начальная часть аргумента теряется.

#(лс,S,А) «Логический сдвиг» (три аргумента). Значением этой функции является сдвинутое логическое значение аргумента A. Величина сдвига дается арифметическим значением аргумента S. Если оно положительно, то происходит сдвиг влево, если отрицательно — то вправо. Значение функции имеет ту же длину, что логическое значение A; освобождающиеся позиции заполняются нулями. Нелогическая начальная часть А теряется.

#(лц,S,А) «Логический циклический сдвиг» (три аргумента). Значением функции является результат циклического сдвига (поворота) логического значения аргумента А. Величина сдвига задается арифметическим значением аргумента S; сдвиг происходит влево, если значение S положительно, и вправо, если оно отрицательно. Циклический сдвиг не меняет длины аргумента. Нелогическая начальная часть А теряется.

#(рв,A,B,T,F) «Равенство» (пять аргументов). Если аргумент А в точности совпадает как цепочка с аргументом В, то значением функции является аргумент Г, в противном случае значение функции — аргумент F. Отметим, что Т и F могут быть любыми цепочками.

#(бл,A,B,T,F) «Больше» (пять аргументов). Значением этой функции является аргумент Т, если арифметическое значение А больше арифметического значения В, и аргумент F в противном случае.

#(зб,A,F1,F2…) «Запись блока» (три или больше аргументов). Функция записывает бланки с именами F1, F2, ... на некоторое внешнее запоминающее устройство. После записи всех бланков они удаляются из памяти бланков и создается новый бланк с именем A, тело которого есть адрес во внешней памяти записанного блока бланков. Если уже есть бланк с именем A, то его старое значение теряется. «Адресом» блока должна быть цепочка; доступ к бланкам во внешней памяти осуществляется при помощи любого бланка, имеющего значением цепочку-адрес. Значение этой функции — пустая цепочка.

#(иб,A) «Извлечь блок» (два аргумента). Эта функция с пустым значением извлекает из внешней памяти блок бланков, «адрес» которого находится в теле бланка с именем А. Бланки возвращаются в память бланков, и если какие-либо из них уже существуют, то прочитанные значения заменяют их старые значения. Внешний блок бланков по-прежнему остается доступным.

#(уб,А) «Удалить блок» (два аргумента). Эта, функция с пустым значением освобождает внешнюю память, в которой хранится блок по адресу, указанному в теле бланка А; этот блок становится недоступным. Одновременно удаляется бланк А.

#(си,S) «Список имен» (два аргумента). Значение этой функции— список имен всех бланков, присутствующих в данный момент в памяти бланков. Имена разделяются цепочкой S.

#(пб,N) «Печать бланка» (два аргумента). Эта функция с пустым значением печатает тело бланка N; на печать выдаются также указатель бланка и метки сегментов. Муэрс предлагает печатать указатель бланка в виде <↑>, а метку сегмента — в виде <i>. Таким образом, результатом пб может быть нечто вроде aB<2>cdE<1><f><↑><1>hiJ; мы видим одно вхождение метки 2 и два вхождения метки 1.