Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Топ:
Оснащения врачебно-сестринской бригады.
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2021-01-31 | 62 |
5.00
из
|
Заказать работу |
|
|
|
Универсальная функция, или интерпретация – это функция, которая мо- жет вычислять значение любой формы, включая формы, сводимые к вычис- лению любой заданной функции, применяемой к аргументам, представлен- ным в этой же форме, по доступному описанию данной функции. (Конечно, если функция, которой предстоит интерпретироваться, имеет бесконечную рекурсию, интерпретация будет повторяться бесконечно.)
|
– атом обычно понимается как переменная. Для него следует найти зна- чение, связанное с ним в ТА. Например, могут быть переменные вида x, elem, смысл которых зависит от контекста, в котором они вычисляются;
|
– константы, представленные как аргументы функции QUOTE, можно просто извлечь из списка ее аргументов. Например, значением константы (QUOTE T) является атом T, обычно символизирующий значение «истина»;
– условное выражение требует специального алгоритма для перебора пре- дикатов и выбора нужной ветви;
– остальные формы выражений рассматриваются по общей схеме как спи- сок из функции и ее аргументов. Обычно аргументы вычисляются, а затем вычисленные значения передаются функции для интерпретации ее определе- ния. Так обеспечивается возможность писать композиции функций;
– если функция представлена своим названием, то среди названий разли- чаются имена встроенных элементарных функций, такие как CAR, CDR, CONS и т. п., и имена функций, введенных в программе;
– для встроенных функций интерпретация сама «знает», как найти их зна- чение по заданным аргументам, а для функций, введенных в программе, ис- пользует их определение, которое находит подобно переменной по имени в таблице атомов ТА – в контексте7;
– если функция построена с помощью λ-конструктора, то, прежде чем ее применять, понадобится связывать переменные из λ-списка параметров со значениями аргументов;
–
|
7 Похоже на резервированные слова, но в реальных СП все функции (более тысячи) равноправно являются встроенными функциями.
ций накапливаются в «хвосте» стека – контекста, представленного системной переменной ТА, т. е. работают как глобальные определения.
Таким образом, интерпретация выражений осуществляется как взаимо- действие четырех прикладных семантик:
– обработка структур данных (cons, car, cdr, atom, eq);
– конструирование функциональных объектов (lambda);
|
– идентификация объектов (список параметров, таблица атомов, defun);
– управление логикой вычислений и частичными вычислениями (компо- зиции, quote, cond, eval).
|
Явное определение универсальной функции позволяет достичь четкости механизмов обработки Lisp-программ.
При написании на демонстрационном подмножестве языка Lisp опреде- ления функции EVAL, согласно приведенной выше спецификации, задается переход от данного списочного представления выражения E к его значению с учетом заданной таблицы атомов ТА, хранящей значения атомов.
Универсальная функция EXEC для минимального подмножества языка Pascal немного отличается от EVAL:
– атом понимается как переменная или константа;
– константы строятся из так называемых литералов и могут быть поиме- нованы;
– условное выражение состоит из предиката и двух позиций для выбора нужной ветви;
– существуют специальные формы для циклов, определения и вызова процедур и функций и другие схемы управления вычислениями;
– выражения обрабатываются с учетом таблицы приоритетов операций и расстановки скобок;
– определения переменных и функций или процедур хранятся раздельно.
Основные различия:
– EXEC не поддерживает безымянные функции;
–
|
– EXEC поддерживает раздельное хранение значений и определений функций/процедур;
– EVAL допускает конструирование определений функций подробно лю- бым данным в процессе вычислений.
Абстрактная машина
Особенности процесса компиляции достаточно сложны даже для простых языков, поэтому спецификация результата компиляции часто задается в тер- минах языково-ориентированных абстрактных машин (АМ). Система команд АМ представляет собой реализацию базовой семантики (БС), дополненную рядом системных действий по передаче параметров и защите областей дей- ствия, подразумеваемых ЯП, но не имеющих четкого синтаксического пред- ставления. Такое определение может быть машинно-независимым и перено- симым.
|
АМ различает обычно следующие категории команд:
–
|
– вычисления над безымянными операндами в стеке при обработке выра- жений;
– пересылка значений из стека в память с учетом локализации;
– организация ветвлений и циклов;
– организация вызовов процедур и функций с сохранением/восстановле- нием контекста.
Могут быть и другие категории команд.
При сравнении императивного и функционального подходов к програм- мированию с цель создания Lisp-процессора, П. Лэндин (P. J. Landin) пред- ложил специальную абстрактную машину SECD, удобную для специфика- ции машинно-зависимых аспектов семантики Lispа. Подробное описание этой машины можно найти в книге Хендерсона по функциональному про- граммированию [15].
|
s e c d → s' e' c' d' – переход от старого состояния к новому.
Встраиваемые в ядро интерпретатора операции должны соответствовать стандартным правилам доступа к параметрам и размещения выработанного результата. Таким же правилам должен подчиняться и компилируемый код. Это позволяет формально считать равноправными встроенные и програм-
мируемые функции. Компилятор по исходному тексту программы строит код программы, эквивалентный тексту.
|
LD – ввод данного из контекста в стек;
LDC – ввод константы из программы в стек; LDF – ввод определения функции в стек;
|
AP – применение функции, определение которой уже в стеке;
RTN – возврат из определения функции к вызвавшей ее программе; RAP – применение рекурсивной функции;
DUM – резервирование памяти для хранения состояний при ветвлениях и вызовах функции;
SEL – ветвление в зависимости от активного (верхнего) значения стека; JOIN – переход к общей точке после ветвления;
CAR – первый элемент из активного значения стека; CDR – без первого элемента активное значение стека;
CONS – формирование узла по двум верхним значениям стека; ATOM – неделимость (атомарность) верхнего элемента стека; EQ – равенство двух верхних значений стека;
STOP – останов.
|
s e (STOP) d → s e (STOP) d
Следуя Хендерсону, для четкого отделения обрабатываемых элементов от остальной части списка будем использовать следующие обозначения:
– (x. L) – это значит, что первый элемент списка – x, а остальные нахо- дятся в списке L;
– (x y. L) – первый элемент списка – x, второй элемент списка – y, осталь- ные находятся в списке L и т. д.
Теперь мы можем методично описать эффекты всех перечисленных выше команд.
s e (LDC q. c) d → (q. s) e c d
(a b. s) e (CONS. c) d → ((a. b). s) e c d
((a. b). s) e (CAR. c) → (a. s) e c d
((a. b). s) e (CDR. c) → (b. s) e c d
Для предиката оговариваем, в каких случаях вырабатывается значение
«истина».
((a. b). s) e (ATOM. c) d → (NIL. s) e c d
(A. s) e (ATOM. c) d → (T. s) e c d
|
(a b. s) e (EQ. c) d → (NIL. s) e c d
Истина «Т» – для совпадающих указателей, для несовпадающих – NIL, т. е. ложь.
Для доступа к значениям, расположенным в контексте, можно определить специальную функцию N-th, выделяющую из списка элемент с заданным но- мером N в предположении, что длина списка превосходит заданный адрес:
s e (LD n. c) d → (x. s) e c d
x – это значение (N-th n e).
При реализации ветвлений управляющая программа соответствует следу- ющему шаблону:
(... SEL (... JOIN) (... JOIN)...)
Ветви размещены в подсписках с завершителем JOIN, после которых сле- дует общая часть вычислений. Для большей надежности на время выполне- ния ветви общая часть сохраняется в дампе – резервной памяти, а по завер- шении ветви – восстанавливается в регистре управляющей программы:
|
(NIL. s) e (SEL c1 c0. c) d → s e c0 (c. d) (T. s) e (SEL c1 c0. c) d → s e c1 (c. d)
s e (JOIN) (c. d) → s e c d
|
Завершается процедура командой RTN, восстанавливающей регистры и размещающей в стеке результат процедуры:
s e (LDF f. c) d → ((f. e). s) e c d
((f. ef) vf. s) e (AP. c) d → NIL (vf. ef) f (s e c. d)
(x) e (RTN) (s e c. d) → (x. s) e c d
f – тело определения,
ef – контекст в момент вызова функции,
vf – фактические параметры для вызова функции, x – результат функции.
Рекурсивные вызовы функций требуют резервирования памяти для уни- кальных ссылок на разные поколения фактических аргументов, что достига- ется путем размещения фиктивного объекта «ω», который функция rplaca, в порядке исключения, замещает на реальные данные:
s e (DUM. c) d → s (ω. e) c d
((f. ef) vf. s) e (RAP. c) d → NIL (rplaca vf ef) f (s e c. d)
|
Таблица 7
|
|
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!