Обработчик сообщения safety принимает единственный
(dynamic-put safety ?on-off)
(if (eq ?on-off on)
then (dynamic-put hammer down)
) )
Обработчик сообщения safety принимает единственный аргумент, который может иметь только два символических значения on или off. В противном случае нам пришлось бы разработать два обработчика: один для сообщения saf ety-on, а другой — для сообщения safety-of f . Учтите, что в некоторых моделях, например в Walther PPK, при установке пистолета на предохранитель патронник очищается автоматически.
Обработчик сообщения drop просто извлекает обойму из пистолета.
(defmessage-handler pistol drop ()
(dynamic-put magazine out) )
Теперь, когда обеспечено правильное исходное снаряжение пистолета, можно приступить к стрельбе. Следующее правило обеспечивает вставку обоймы в пистолет перед стрельбой:
(defrule mag-in
(object (name [PPK]) (safety on) (magazine out))
(range-test (fired no) (check yes)) =>
(send [PPK] seat) )
Обработчик сообщения seat выполняет действия, противоположные тем, которые выполняет обработчик drop.
(defmessage-handler pistol seat ()
(dynamic-put magazine in) )
Можно было бы, конечно, включить в программу и следующее правило mag-in:
(defrule mag-in
?gun <- (object (name [PPK]) (safety on)
(magazine out)) (range-test (fired no) (check yes)) =>
(modify ?gun (magazine in) )
но это противоречит одному из принципов объектно-ориентированного программирования, который гласит, что объект должен самостоятельно обрабатывать содержащиеся в нем данные. Следующее правило обеспечивает снаряжение обоймы патронами:
(defrule load
(object (name [PPK]) (magazine in) (chamber 0)) =>
(send [PPK] rack) )
На примере обработчика сообщения rack вы можете убедиться в справедливости нашего замечания о том, что обработку данных внутри объекта нужно поручать методам этого объекта, а не включать прямо в правило.
(defmessage-handler pistol rack ()
(if (> (dynamic-get rounds) 0) then (dynamic-put chamber 1)
(dynamic-put rounds (- (dynamic-get rounds) 1))
(dynamic-put slide forward) else (dynamic-put chamber 0)
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий