История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2021-01-31 | 64 |
5.00
из
|
Заказать работу |
|
|
Команда | Пояснение |
LDE | Загрузка отложенного выражения с созданием рецепта |
RPL | Замена рецепта его результатом |
APN | Возобновление отложенного выражения |
|
Таблица 29
Дополнение АМ для эффективного выполнения отложенных действий
Команда | Результат |
s e (LDE f. c) d | → ([F (f. e)]. s) e c d |
(x) e (RPL) ([F (F. e)] ee c. d) | → (x. s) ee c d при этом ([F (F. e)] → [T x] 17 |
([T x]. s) e (APN. c) d | → (x.s) e c d |
([F (f. e)]. s) ee (APN. c) d | → Nil e f ([F (F. e)] ee c. d) |
Эффект отложенных вычислений можно продемонстрировать на обра- ботке бесконечных структур данных, в которых продолжение структуры представлено как вычисление следующих элементов. Включение в квадрат- ные скобки «[ ]» здесь символизирует размещение по тому же адресу.
Фрагмент | Примечание |
(def beg (LAMBDA (k lst) (cond ((EQ k Nil)()) (T (cons (car lst) (beg (cdr k) (eval (cons (cdr lst) Nil)) ))) ))) (def endless (LAMBDA (m) (cons m (lambda () (endless (cons m m)))) ) ) (beg '(a b c) (endless 'A)) ; = (A (A. A) ((A. A) A. A)) | Вырезка начального отрезка |
|
Все это выполнимо уже на базе интерпретатора языка Pure Lisp.
Свойства атомов
|
|
До сих пор атом рассматривался только как уникальный указатель, обес- печивающий быстрое выяснение различимости имен, названий или симво- лов. Теперь описываются списки свойств, которые начинаются или нахо- дятся в указанных ячейках. Каждый атом имеет список свойств. Когда атом читается (вводится) впервые, тогда для него создается пустой список свойств, который потом можно заполнять. Список свойств устроен как специальная структура, подобная записям в Паскале или структурам в Си, но указатели в такой записи сопровождаются тэгами, символизирующими тип хранимой информации. Первый элемент этой структуры расположен по адресу, кото- рый задан в указателе. Остальные элементы доступны по этому же указателю с помощью ряда специальных функций. Элементы структуры содержат раз- личные свойства атома. Каждое свойство помечается атомом, называемым индикатором, или расположено в фиксированном поле структуры. Свойства могут быть системными или программируемыми.
Здесь достаточно принять к сведению, что реализация атомарных объек- тов – это сложная структура данных, в свою очередь представленная спис- ками – встроенная база данных.
С помощью функции GET в форме (GET x i) можно найти для атома x свойство, индикатор которого равен i.
Значением
(GET 'FF 'EXPR)
будет
(LAMBDA (X) (COND …)),
|
Свойство с его индикатором может быть вычеркнуто – удалено из списка функцией REMPROP в форме (REMPROP x i).
С середины 1970-х годов возникла тенденция повышать эффективность разработкой специальных структур, отличающихся в разных реализациях.
Существуют реализации, например, muLisp, допускающие работу с представ- лениями атома как с обычными списками посредством функций CAR, CDR.
Гибкий интерпретатор
|
|
Определение | Примечание |
(DEFUN eval(e a) (COND ((atom e) (cdr(assoc e a))) ((eq (car e) 'QUOTE) (cadr e)) ((eq(car e) 'COND) (evcon(cdr e) a)) (T (apply (car e) (evlis(cdr e) a) a) | Переменная. Константа. Ветвление. Применение функции. |
(DEFUN apply (fn x a) (COND ((atom fn)(cond ((eq fn 'CAR) (caar x)) ((eq fn 'CDR) (cdar x)) ((eq fn 'CONS) (cons (car x)(cadr x))) ((eq fn 'ATOM) (atom (car x))) ((eq fn 'EQ) (eq (car x)(cadr x))) (T (apply (eval fn a) x a)))) ) ((eq(car fn)'LAMBDA) (eval (caddr fn) (pairlis (cadr fn) x a))) ((eq (car fn) 'LABEL) (apply (caddr fn) x (cons (cons (cadr fn)(caddr fn)) a))))) | Элементарные функции. Программируемые функции. Безымянная функция. Именованная функция. |
(DEFUN evcon (c a) (COND ((eval (car c) a) (eval (cadr c) a)) (T (eval (caddr c) a)))) | Выбор ветви. |
(DEFUN evlis (m a) (COND ((null m) Nil) (T (cons(eval (car m) a) (evlis(cdr m) a))) ) | Вычисление параметров |
|
22 Предварительный синтаксис языка Lisp, выглядящий как обычной язык программи- рования, отображаемый в круглоскобочное представление списков.
Ради удобочитаемости здесь уменьшена диагностичность, нет пост-вы- числений и формы PROG. Lisp хорошо приспособлен к оптимизации про- грамм. Любые совпадающие подвыражения можно локализовать и вынести за скобки, как можно заметить по передаче значения.
Определения функций хранятся в ассоциативном списке, как и значения переменных.
Функция SUBR – вызывает примитивы, реализованные другими, обычно низкоуровневыми, средствами.
|
Определение | Примечание |
(DEFUN EVAL (e al) (COND | |
((EQ e NIL) NIL) ((ATOM e)((LAMBDA (v) (COND (v (CDR v)) (T (ERROR 'undefvalue))) ) (ASSOC e al)) ) ((EQ (CAR e) 'QUOTE) (CAR (CDR e))) ((EQ (CAR e) 'FUNCTION) (LIST 'CLOSURE (CADR fn) al)) ((EQ (CAR e) 'COND) (EVCON (CDR e) al)) (T (apply (CAR e)(evlis (CDR e) al) al)) )) | Диагностика. Однократность вычисления значения. Замыкание функциональ- ного аргумента |
Пример 27. Диагностика отсутствия определений при вычислении форм
|
|
|
Определение | Примечание |
(DEFUN APPLY (fn args al) (COND ((EQ e NIL) NIL) ((ATOM fn) (COND ((MEMBER fn '(CAR CDR CONS ATOM EQ)) (SUBR fn agrs al)) (T (APPLY (EVAL fn al) args al)) )) | Локализация списка встроенных подпро- грамм. Выполнение подпро- грамм. |
((EQ (CAR fn) 'LABEL) (APPLY (CADDR fn) args (CONS (CONS (CADR fn)(CADDR fn)) al))) ((EQ (CAR fn) ' CLOSURE) (APPLY (CDR fn) args (CADDR fn))) | Именование локаль- ных функций. |
((EQ (CAR fn) 'LAMBDA) (EVAL (CADDR fn) (APPEND (PAIR (CADR fn) args) al)) (T (APPLY (EVAL fn al) args al)) )) | Применение функцио- нального аргумента с помомщью замыка- ния |
|
Определения ASSOC, APPEND, PAIR, LIST, MEMBER – стандартны.
Определение | Примечание |
(DEFUN evcon (c a) (COND ((evel (car c) a) (evel (cadr c) a)) (с (evcon (caddr c) a)))) | Возможно отсутствие ветви – пока c не пуст |
Пример 29. Выбор ветви, допускающий отсутствие истинного предиката
Определение | Примечание |
(DEFUN evlis (m a) (COND (m (cons(evel (car m) a) (evlis(cdr m) a) )) )) | Пока «M» не пуст, присоединяем значение его первого элемента к списку значений остальных элементов |
|
|
|
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!