Слоты не могут быть использованы в упорядоченных фактах, а в неупорядоченных файлах, в свою очередь, нельзя ссылаться на данные, используя порядок слотов.
CLIPS отличает неупорядоченные факты от упорядоченных по первому полю факта. Первое поле фактов любого типа должно быть значением типа symbol. Если это значение соответствует имени некоторого шаблона, то факт является неупорядоченным. Как и упорядоченные факты, неупорядоченные ограничиваются скобками.
Пример 4.11. Неупорядоченные факты
(client (name "Joe Brown") (id X9345A))
(point-mass (x-velocity 100) (y-velocity -200))
(class (teacher "Martha Jones") (#-students 30) (Room "37A"))
(grocery-list (#-of-items 3) (items bread milk eggs))
Замечание
Порядок слотов в неупорядоченном факте не важен. Например, все приведенные ниже факты считаются идентичными:
(class (teacher "Martha Jones") (#-students 30) (Room "37A"))
(class (#-students 30) (teacher "Martha Jones") (Room "37A"))
(class (Room "37A") (#-students 30) (teacher "Martha Jones"))
В отличие от фактов, приведенных выше, упорядоченные факты из следующего примера не являются идентичными:
(class "Martha Jones" 30 "37А")
(class 30 "Martha Jones" "37A")
(class "37A" 30 "Martha Jones")
Очевидными преимуществами применения шаблонов являются более высокая читабельность и независимость слотов от порядка их определения.
Так же как и упорядоченные факты, шаблоны можно добавлять в список фактов и удалять из него. Кроме того, существует возможность модификации и дублирования шаблонов.
Инициализация фактов
Конструктор deffacts позволяет создавать набор фактов, инициализирующий базу знаний CLIPS, при каждой очистке системы. При выполнении команды reset текущий список фактов CLIPS очищается, а затем в него добавляются все факты, заданные конструкторами deffacts. CLIPS содержит один предопределенный системный конструктор deffacts, который выполняет добавление в систему факта initial-fact. Более подробно особенности создания и использования фактов в CLIPS описаны в гл. 5.