Работа с событиями
Наиболее общая модель организации процессов сводится к определению реакций на происходящие события. Событий конечное число. Работа с событиями в системе Clisp обеспечивается парой функций:
Throw – вызов события.
Catch – обработка события (реакция на событие).
Процесс с событиями проиллюстрирован следующим примером Грехема [ 10 ] как взаимодействие функций, работающих на разных уровнях:
(Defun super () ; Внешний уровень – обработчик внутренних событий
(catch 'abort ; Имя обрабатываемого внутреннего события
(sub) ; Вызов формы, в которой возможно данное событие
(print "It is impossible") ; Реакция на событие
) )
(Defun sub () ; Внутренний уровень
(throw 'abort 99) ; Вызов события
)
(super) ; Вызов формы, контролирующей внутренние события.
9.3.
Обработка событий при взаимодействии функций
Таблица
9.1.
Clisp: Функции управления вычислениями
(And Форма … ) |
Вычисляет формы, пока не наткнетсяя на Nil
|
(Case Значение ( Ключ Форма) … ) |
По значению, совпадающему с Ключем, выбирает форму, которую вычисляет |
(Catch Атом Форма …) |
Работает в паре с throw. Устанавливает ловушку, идентифицируемую Атомом внутри Форм. |
(Cond (Предикат Форма) … ) |
Ветвление |
(If Предикат Да-форма Нет-форма ) |
Обычное условное выражение |
|
|
(Or Форма … ) |
Вычисляет формы , пока не найдет отличную от Nil/
|
(Throw Атом Форма ) |
Работает в паре с Catch. Форма задает реакцию на обнаруженную ловушку Атом. |
(Unless Предикат Форма … ) |
Вычисляет формы если предикат имеет значение Nil
|
(When Предикат Форма … ) |
Вычисляет формы при истином значении предиката. |
Выводы:
-
Замедленные вычисления могут быть результативнее и эффективнее обычных.
- Хранимые вместе с данными рецепты их вычислений позволяют работать с бесконечными множествами.
- В ряде случаев возможно получение полного результата при неопределенных значениях частей.