Безусловные правила

Если правило не содержит условных элементов в своей левой части, то к предпосылкам правила автоматически добавляется образец initial-fact (конфигурацию CLIPS можно настроить таким образом, чтобы вместо об­разца факта добавлялся образец объекта initial-object). Например, следующее правило из примера 6.46 будет преобразовано так, как показано в примере 6.47:

Пример 6.46. Правило без условий

(defrule example

=>)

Пример 6.47. Преобразованное правило без условий

(defrule example

(initial-fact)

=>)

Использование элементов test» not перед and

Условные элементы test и not, стоящие перед and, добавляют образец initial-fact или initial-object непосредственно перед собой. Образец initial-fact добавляется, если в первом условном элементе используется образец факта. Образец initial-object добавляется, если в первом условном элементе используется образец объекта. Если в первом условном элементе нет образцов, то тип добавляемого образца определяется по следующему условному элементу таким же методом. Если во всем текущем условном вы­ражении нет образцов, то система использует предопределенный факт initial-fact (хотя конфигурацию CLIPS можно настроить таким образом, чтобы вместо образца initial-fact добавлялся образец initial-object). На­пример, следующие правила из примера 6.48 будут изменены так, как в примере 6.49.

Пример 6.48. Правила с условиями test и not перед and

(defrule example1

(test (> 80 (startup-value)))

=>

(defrule example2

(test (> 80 (startup-value)))

(object (is-a MACHINE))

=>)

(defrule example3

(machine?x)

(not (and (not (part?x?y))

(inventoried?x)))

=>

Пример 6.49. Преобразованные правила с условиями test и not перед and

(defrule example1

(initial-fact)

(test (> 80 (startup-value)))

=>)

(defrule example2

(object (is-a INITIAL-OBJECT) (name [initial-object]))

(test (> 80 (startup-value)))

(object (is-a MACHINE))

=>)

(defrule example3

(machine?x)

(not (and (initial-fact)

(not (part?x?y))

(inventoried?x)))

=>)

Использование элемента not перед test

Если сразу перед условным элементом test использовался условный эле­мент not, то CLIPS автоматически перемещает условный элемент not на место первого условия непосредственно следующего за test. Например, правило из примера 6.50 изменится на эквивалентное (пример 6.51):

Пример 6.50. Правило с условиями not перед элементом test

(defrule example

(а?х)

(not (b?x))

(test (>?х 5)}

=>)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: