Реферат: Программирование на языке CLIPS
(defrule correct1
(object (name [PPK]) (safety off) )
(range-test (check no))
=>
(send [PPK] safety on)
)
(defrule correct2
(object (name [PPK]) (safety on) (magazine in))
(range-test (check no))
=>
(send [PPK] drop)
)
Как при разработке предыдущего правила, нам понадобятся обработчики сообщений safety и drop.
(defmessage-handler pistol safety (?on-off)
(dynamic-put safety ?on-off)
(if (eq ?on-off on)
then (dynamic-put hammer down)
)
)
Обработчик сообщения safety принимает единственный аргумент, который может иметь только два символических значения on или off. В противном случае нам пришлось бы разработать два обработчика: один для сообщения safety-on, а другой – для сообщения safety-off. Учтите, что в некоторых моделях, например в 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))
=>