Реферат: Программирование на языке CLIPS

=>

(send [PPK] safety off)

)

Правило fire выполняет стрельбу.

(defrule fire

(object (name [PPK]) (safety off);

?T <- (range-test (fired no))

=>

(if (eq (send [PPK] fire) TRUE)

then (modify ?T (fired yes)))

)

Обратите внимание, что в данном правиле используется обработчик сообщения, которое возвращает значение. Анализируя его, можно выяснить, произведен ли выстрел, т.е. выполнена ли в действительности та операция, которая «закреплена» за этим сообщением. Если в патроннике был патрон и пистолет был снят с предохранителя, то обработчик сообщения вернет значение TRUE (после того, как выведет на экран BANG!). В противном случае он вернет FALSE (после того, как выведет на экран click).

(defmessage-handler pistol fire ()

(if (and

(eq (dynamic-get chamber) 1)

(eq (dynamic-get safety) off)

)

then (printout t crlf “BANG!” t crlf)

TRUE

else (printout t crlf “click” t crlf)

FALSE

)

)

Пусть вас не смущает, что в обработчике сообщения анализируется условие, которое уже было проанализировано правилом, отославшим сообщение (в данном случае речь идет об условии safety off). Дело в том, что одно и тоже сообщение может отсылаться разными правилами и нет никакой гарантии, что в каждом из них будет проверяться это условие.

После завершения стрельбы пистолет нужно вновь вернуть в положение «по-походному». Начинается это с того, что пистолет устанавливается на предохранитель, для чего используется ранее разработанный обработчик сообщения safety.

(defrule unready

(object (name [PPK]) (safety off))

(range-test (fired yes))

=>

К-во Просмотров: 586
Бесплатно скачать Реферат: Программирование на языке CLIPS