Cтраница 2
Аналогично SPAN не пропускает сопоставленную цепочку литер, если компоненты образца, отличные от SPAN, сопоставить не удалось. [16]
После заполнения таблицы числами, цепочками литер и формулами она принимает вид, показанный на рис. 6.6. В ней остается защитить от случайного редактирования ( изменения) постоянные величины и введенные формулы. Для этого на защищаемую клетку помещается курсорная рамка-указатель, вызывается позиция главного меню Edit ( аккордом Ctrl буква Е), а в нем выполняется команда Protect from Editing - защита от редактирования. После этого цвет символов этой клетки изменится ( обычно с белого на желтый при синем фоне), а попытки человека изменить содержимое этой клетки будут безуспешными. [17]
Конкатенация является основной операцией над цепочками литер. [18]
Свойства: операнды должны быть цепочками литер или числами ( преобразованными в цепочки); результатом является неявное логическое значение ( сигнал верно-неверно), которое можно использовать для управления ветвлением в этой же инструкции. Для упорядочения цепочек литер используется упоминавшееся выше обобщение алфавитного упорядочения, доступное через ключевое слово & ALPHABET, значением которого является цепочка, содержащая все литеры, перечисленные в требуемом порядке. Универсальная операция: проверяет типы операндов и выполняет необходимые преобразования перед непосредственным сравнением. [19]
Основным элементом данных в Сноболе-4 является цепочка литер, такая, например, как эта строка. В языке имеются операции для объединения и разделения цепочек, для проверки их содержимого и для замещения отдельных частей. [20]
Каждый элемент центральной таблицы состоит из цепочки литер и указателя. Обычно ввиду частых - обращений к этой таблице она имеет структуру хеш-таблицы фиксированного размера, каждый элемент которой представляет собой блок, содержащий все элементы с одинаковым хеш-индексом. Значением цепочки в такой таблице может быть указатель на другую цепочку в этой таблице, число или указатель на массив, таблицу ( список свойств), образец или структуру данных определяемого программистом типа. Цепочки и их значения записываются в кучу, но основная хеш-таблица ( содержащая указатели на блоки в куче) расположена в статической области. [21]
Рассмотрим следующий пример, в котором цепочка литер МОСТЫ сопоставляется со структурным образцом, являющимся значением переменной ПМ. [22]
Записи в модуле загрузки представляют собой цепочки внешних литер переменной длины. [23]
В большинстве реализаций Снобола 4 множество цепочек литер, существующих в любой момент выполнения программы, хранится в центральной таблице цепочек. Эта таблица организована как хеш-таблица, в которой каждая позиция является указателем на связанный список группы. Чтобы проверить, принадлежит ли множеству данная цепочка X, применяется схема двойного хеширования, X хешируется дважды: для получения хеш-адреса, используемого как индекс в центральной таблице, задающий указатель на соответствующую группу, и для получения порядкового номера в группе. Каждый элемент в списке группы состоит из порядкового номера в группе и указателя на цепочку. Элементы данной группы упорядочены по порядковому номеру. Для того, чтобы определить, хранится ли X в группе, определяемой хеш-адресом X, порядковый номер X последовательно сравнивается с номерами в списке группы до тех пор, пока не произойдет совпадение или пока не будет обнаружен порядковый номер, больший чем у X В последнем случае X немедленно включается в список, в первом требуется политерное сравнение X со всеми цепочками в группе, имеющими тот же самый порядковый номер. Запрограммируйте эту схему двойного хеширования в предположении, что цепочки хранятся в последовательных блоках и имеют дескрипторы, определяющие их длину. Желательно, чтобы в запрограммированной функции в качестве входной информации использовался указатель на некоторую цепочку и чтобы функция, проверяя наличие цепочки в таблице, включала цепочку в таблицу, если ее там не оказалось, возвращала адрес прежней позиции, если цепочка уже была в таблице, или адрес новой позиции, если ее там до этого не было. [24]
Результат должен быть представлен в виде цепочки литер. [25]
Ценой машинной независимости описаний данных как цепочек литер является снижение скорости выполнения программы, поскольку границы машинных слов могут не совпадать с границами элементов данных, что затрудняет доступ к последним, и поскольку перед выполнением арифметических операций числа должны преобразовываться в аппаратное представление и результат должен быть преобразован опять в форму цепочки литер. В качестве компромисса в языке имеются используемые по желанию фразы: SYNCHRONIZED, с помощью которой можно совместить начало или конец элемента данных с границей слова ( или другой естественной единицы памяти) и USAGE IS COMPUTATIONAL ( используется в вычислениях), позволяющей использовать для конкретного элемента данных аппаратное представление чисел. Применение этих фраз приводит к тому, что длина структур данных или индивидуальных элементов становится зависимой от реализации, но выигрыш в скорости выполнения может быть огромным. [26]
Данные, которые представлены литерами и цепочками литер. [27]
Команда для рисования цепочки литер - TEXT цепочка литер. [28]
Механизм выполнения операции вывода также прост: цепочка литер копируется из области записи файла в буферную область и в конечном счете во внешний файл. Однако выводимые строки обычно помещаются в запись, которая находится в рабочей памяти, и переносятся в область записи файлг только перед самым выводом. При такой организации вывода можно во время компиляции внести в запись, которая находится в рабочей памяти, фиксированные заголовки и другую постоянную информацию и не изменять ее в дальнейшем; см. пример в разд. [29]
![]() |
Представления в памяти вещественных чисел с дескрипторами типа. [30] |