Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Оснащения врачебно-сестринской бригады.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Дисциплины:
2021-01-31 | 71 |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!