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