Ббк 32. 973-018 г рецензент канд физ мат наук, Ф. А. Мурзин


Download 278.16 Kb.
bet42/68
Sana12.10.2023
Hajmi278.16 Kb.
#1700499
TuriКурс лекций
1   ...   38   39   40   41   42   43   44   45   ...   68
Bog'liq
FIT-Gor-PP3

Гибкий интерпретатор

В качестве примера повышения гибкости определений приведено упрощенное определение Lisp-интерпретатора на Lisp-е, полученное из М- выражения, приведенного Дж. Маккарти в описании Lisp 1.5.
Ради удобочитаемости здесь уменьшена диагностичность, нет пост- вычислений и формы PROG. Lisp хорошо приспособлен к оптимизации программ. Любые совпадающие подвыражения можно локализовать и вынести за скобки, как можно заметить по передаче значения.
Определения функций хранятся в ассоциативном списке, как и значения переменных.
Функция SUBR – вызывает примитивы, реализованные другими, обычно низкоуровневыми, средствами.
ERROR – выдает сообщения об ошибках и сведения о контексте вычислений, способствующие поиску источника ошибки. Уточнена работа с функциональными аргументами.



Определение

Примечание

(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 ) )




) )




Пример 25. Диагностика отсутствия определений при вычислении форм



Определение

Примечание

(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 ))
) )

Локализация списка встроенных подпрограмм Выполнение подпрограмм
Именование локальных функций

Применение функционального аргумента



Пример 26. Применение подпрограмм и функциональных параметров

Определения ASSOC, APPEND, PAIR, LIST – стандартны.





Определение

Примечание

(DEFUN evcon (c a) (COND
((null c) Nil)
((evel (car c) a) (evel (cadr c) a) )
( T (evel (caddr c) a) ) ))

Возможно отсутствие ветви




Download 278.16 Kb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   68




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling