Cтраница 4
Внутри определяющего выражения de или определяющего выражения del функции fn, если это - функция класса EXPR, могут встречаться не только связанные переменные этого выражения, но и другие переменные, которые называются свободными. Значения свобод ных переменных в момент задания функционального аргумента и в момент его использования могут отличаться друг от друга. Считается, что при вычислении тела определяющего выражения de или fifet должны использоваться те значения свободных переменных, которые эти переменные имели во время задания функционального аргумента, а не те, которые они могли получить позже. Это - существенное исключение из общего правила ( см. разд. Задавая функциональный аргумент в виде ( FUNCTION de) или ( FUNCTION fn), мы и обеспечиваем соблюдение этого особого правила нахождения значений свободных переменных в телах функциональных аргументов. Если же в теле определяющего выражения ни прямо ни косвенно ( через другие функции класса EXPR) не используются свободные переменные, то вместо FUNCTION можно прибегнуть к QUOTE. Последнюю форму заведомо можно применять, если fn - наименование встроенной функции, так как такие функции не связаны ни с какими определяющими выражениями, и проблемы свободных переменных для них нет. [46]
Метаязык широко практикуется для описания алгоритмических языков. В этом языке применяется формульное построение определений, понятий. В левой стороне указывается определяемое понятие, а в правой - определяющее выражение, его составные элементы, конкретные значения определяемого понятия. Для записи на метаязыке пользуются знаком ( символом):: имеющим смысл равно по определению ( это значит, что есть); угловыми скобками, в которые заключаются определяемые понятия, читаемые как некоторая структура данного языка ( скобки показывают, что на место определяемого понятия может быть подставлено любое конкретное его значение); знаком вертикальная черта, являющимся символом операции перечисления и читаемым ИЛИ. [47]
Смещение может быть вычислено во время компиляции, оно остается после этого неизменным на всем протяжении работы программы и может храниться в самой команде перехода. Текущее значение базы известно только во время выполнения программы. Оно хранится в виде адреса, обозначенного ае, в составе преобразованного определяющего выражения компилированной функции ( см. разд. При уборке мусора адрес ае корректируется автоматически. [48]
В качестве еще одного способа расширения дедуктивных формализмов, построенного по образу содержательной логики, следует упомянуть правило допущения явных определений, с помощью которого формализуется метод введения номинальных определений. Всякое явное определение представляет собой какую-либо добавляемую к дедуктивному формализму аксиому, представляющую собой либо равенство, с помощью которого вводится новый индивидный символ или новый функциональный знак, либо эквивалентность, с помощью которой вводится какой-либо предикатный символ. В левой части этого равенства или этой эквивалентности стоит вводимый символ с отличными друг от друга свободными переменными в качестве аргументов, а в правой части - выражение ( определяющее выражение), свободные переменные которого совпадают со свободными переменными левой части и в котором содержатся только символы, принадлежащие исходному формализму. В случае равенства выражение, стоящее в правой части, является термом, а в случае эквивалентности - формулой. [49]
![]() |
Допустимые комбинации типов операндов. [50] |
Внешнему символу, номер которого задается первым аргументом, присваивается значение второго аргумента. Номер символа состоит из двух цифр при / 0 или четырех цифр - в противном случае. Если бит t равен 0, то символ абсолютный, в противном случае - относительный. Типы определяющего выражения и уже занесенного в таблицу символа ( тип символа задается параметром t) должны совпадать. Во время определения любые ссылки на символ должны быть заполнены. [51]