Cтраница 2
Каждое имя может появиться только в одном операторе COMMON и только один раз. Имена формальных параметров и имена функций не допускаются. В одном и том же общем блоке могут быть объекты разных типов, включая текстовые. [16]
Имеется несколько типов данных, встроенных в язык Снобол-4. Кроме того, можно определять новые типы так, как это описано в гл. Некоторые элементы данных, например числа, могут быть представлены различными способами в виде объектов разных типов. Снобол-4 содержит предикаты, которые позволяют проверить, совпадают или различаются два объекта. [17]
Компилятор не может сам по себе знать, как осуществлять преобразования между встроенными типами и типами, определенными пользователем. Программист должен явно указать, как выполнять такие преобразования. Эти преобразования могут быть выполнены с помощью конструкторов преобразований - конструкторов с единственным аргументом, которые преобразуют объекты разных типов ( включая встроенные типы) в объекты данного класса. [18]
Еще несколько слов о федеральном положении. Самым большим его недостатком является отсутствие дифференцированного подхода к проектам разной степени экологической опасности. Мы вынуждены делать оценку воздействия для всех объектов, и, вследствие ограниченности ресурсов, не уделяем достаточного внимания сложным объектам, распыляясь на мелочи. Унифицированный подход к объектам разного типа осложняет и работу контролирующих органов. [19]
Было бы весьма утомительным строить сложные вычисления, опираясь на столь элементарную систему, но обычно в этом и не возникает необходимости. Когда я перейду к обсуждению внешних функций, вы увидите, что существует и другой путь рассмотрения подобных случаев. Наша система различает вероятности и числа. Она рассматривает эти объекты как объекты разных типов, так что компилятор не даст вам возможности совершать арифметические действия с вероятностями. [20]
Конструкции объявления общих объектов ( COMMON) и объявления эквивалентности ( EQUIVALENCE) используются для совмещения в памяти различных блоков. При этом стандартном предусмотрено совмещение разнотипных элементов: Считается, что объект типа двойной точности или типа комплексный занимает две последовательные единицы памяти, а объект типа целый, вещественный и логический - одну единицу памяти. В то же время существуют реализации языка, где это соглашение не выполняется. Поэтому не рекомендуется размещать в одной памяти объекты разных типов. [21]
В данной записи любое имя в угловых скобках представляет собой тип синтаксического объекта. В правой части каждой записи приводятся возможные способы организации синтаксически корректных объектов определяемого типа. Альтернативные варианты разделены знаком, который можно интерпретировать как ИЛИ. Номера идентификаторов следует трактовать в том смысле, что идентификаторы, используемые для обозначения объектов разных типов, должны быть различимыми. Например, константы обозначаются именами идентификатор. Имена переменных идентификатор2 должны начинаться, например, с заглавной буквы. Имена предикатов идентификатор4 должны состоять из прописных букв. Функции, как и предикаты, задают некоторую связь между переменными или константами. Но эта свять или отношение не характеризуются истинностным значением. С помощью функции можно представить сложный объект, например, функция fbook ( Author, Tytle, Publisher, Year) представляет набор информации, характеризующей книгу. Предикат и функция отличаются также на синтаксическом уровне, а именно: функции могут являться аргументами предикатов ( т.е. термами), а предикаты - нет. Следует заметить, что в логике предикатов более высоких порядков по сравнению с первым аргументами предикатов могут быть другие предикаты. Функции с нулевым числом мест ( аргументов) являются аналогами констант. Предикат без аргументов эквивалентен высказыванию. [22]
Компилятор не может сам по себе знать, как выполнять преобразования между встроенными типами и типами, определенными пользователем. Программист должен явно указать, как выполнять такие преобразования. Эти преобразования могут быть выполнены с помощью конструкторов преобразований - конструкторов с единственным аргументом, которые преобразуют объекты разных типов ( включая встроенные типы) в объекты данного класса. [23]