Cтраница 3
Для определения новой составной функции используют специальную функцию DEFINE, имеющую два аргумента: первый - имя определяемой функции, а второй - так называемое определяющее выражение, которое представляет собой Д - выражение, оформленное в соответствии с синтаксисом языка ЛИСП, и выглядит как обращение к специальном функции I AMBDA. Функция IAMBDA имеет два аргумента: первый соответствует списку формальных параметров из Д - выражения, а второй - определяющему правилу. [31]
НЕПРЕДИКАТЙВНОЕ ОПРЕДЕЛЕНИЕ - определение, посредством к-рого создается, или вводится в рассмотрение предмет, являющийся одним из значений неопределенного имени ( переменной), участвующего в определяющем выражении. В тех случаях, когда эта возможность не реализуется ( что бывает, если все вхождения упомянутого неопредел. [32]
Разряды с 39 го по 25 - й отведены под а-указатель, который содержит адрес свойства: адрес начала машинной подпрограммы для свойств SUBR и FSUBR, адрес определяющего выражения функции в списочной памяти для свойств EXPR и FEXPR, адрес значения константы для свойства APVAL, адрес самой информационной ячейки числа для свойств FIX и BITS. Как мы увидим впоследствии ( см. разд. [33]
Действительно, для этого достаточно произвести следующие замены: если вводимый символ является индивидным, то его следует всюду заменить определяющим данный символ выражением, а если этот символ имеет аргументы, то его следует заменить выражением, получающимся из определяющего выражения в результате замены аргументных переменных этого символа стоящими на соответствующих местах аргументами этого символа. Возможно, что в целях предотвращения коллизий между связанными переменными при этом придется произвести некоторые переименования переменных. [34]
Здесь не предусмотрен переход к фиктивной метке, стоящей раньше команды перехода. Но такой переход возможен лишь в одной ситуации - на начало подпрограммы тела определяющего выражения. Смещение адреса в этом случае стандартное и его нет нужды хранить в списке. [35]
Подпрограмма evfun исследует список свойств атома, заданного в качестве наименования интерпретируемой функции. Если в списке свойств обнаруживается индикатор EXPR или FEXPR, то соответствующим свойством является определяющее выражение функции, из которого выброшен первый элемент - атом LAMBDA. Это выражение вместе со списком аргументов ( для FEXPR) или их значений ( для EXPR) передается подпрограмме evlam для завершения интерпретации. В случае обнаружения индикаторов SUBR или FSUBR управление передается машинной подпрограмме, начальный адрес которой извлекается из списка свойств. Здесь, в отличие от сказанного в разд. Подробнее характер использования этих ячеек разъяснен ниже, в разд. [36]
Левую и правую части металингвистических формул соединяют знаком:: , который означает это есть, есть по определению или имеет структуру. Операция соединения специального символа не имеет, с ее помощью метапостоянные или метапеременные в определяющем выражении последовательно приписывают друг к другу. [37]
Fn r - i причем п является номером некоторого терма, содержащего г ( и не больше) различных свободных индивидных переменных. Этот терм может в свою очередь содержать один или несколько явно определенных символов; но в этом случае определяющее выражение любого из этих символов будет иметь номер, меньший номера данного терма. [38]
Структура рабочей подпрограммы зависит о. Кроме четырех известных нам классов, следует ввести еще два: СОМР и FCOMP для функций, полученных компиляцией определяющих выражений функций классов EXPR и FEXPR соответственно. Следует считаться с тем, что во время компиляции выражения ( 2) сама функция fn может быть еще не компилирована, но окажется прокомпилированной к моменту выполнения рабочей подпрограммы для этого выражения. Поэтому структуры рабочих подпрограмм для функций классов EXPR и СОМР ( а также для пары классов FEXPR и FCOMP) должны быть схожими и первая должна легко преобразовываться во вторую, если обнаружится, что к моменту выполнения рабочей подпрограммы функция fn также подверглась компиляции. Это соображение было одной из причин, по которой мы приняли описанную выше схему расположения аргументов компилированных функций в ассоциативном списке. [39]
Это изменение свойств связано с самим процессом компиляции, и пренебрегать им нельзя. Например, если две функции обращаются одна к другой ( а это совсем не редкость), то во время компиляции определяющего выражения первой ( по порядку компиляции) из этих функций вторая еще сохраняет свой прежний класс. [40]
Здесь трудно привести подробное описание компилятора, потому что компилятор - это довольно большая программа, а ее детали сильно зависят от машинного языка, на который происходит перевод. Поэтому более или менее подробно будет описана лишь структура машинных подпрограмм, возникающих в результате компиляции ( обычно называемых рабочими подпрограммами), и их составных частей, соответствующих частям определяющих выражений. [41]
Подпрограмму evfal мы детально не описываем, так как она довольно громоздка, но основана на уже известных принципах. Анализируя значение своего первого аргумента, она должна создать мостик ( возможно, тривиальный - на предыдущую ячейку ассоциативною списка), занести в ассоциативный список наименования связанных переменных функционального аргумента, выполнить его тело ( с помощью call или eval, а может быть, - evcomp или еоехрг, если функциональный аргумент был задан не определяющим выражением, а наименованием функции) и восстановить значения указателей aptr и base, если они были испорчены. [42]
Определяющее выражение нельзя вычислить, оно не имеет значения. Однако само определяющее выражение может быть использовано вместо наименования функции. [43]
Для получения решения в общем случае, описываемом интегродиффе-ренциальными уравнениями (1.2.30) и (1.2.31), приходится, как правило, использовать численные методы. С этой целью уравнения удобно представить в дифференциальной форме. Точнее говоря, с помощью определяющих выражений (1.2.28) и (1.2.29) можно показать, что при Т2 у-ь 1 ( см. разд. [44]
Непредикативное-определение) - определяющее выражение использует определяемый термин. Таковы уже приведенные О. Однако квантор существования, входящий в определяющее выражение, не приводит на самом деле к непредикативности благодаря тому обстоятельству что ( корректно сформулированное) и. [45]