Иллюстрированный самоучитель по введению в экспертные системы

Использование шаблонов. Определение функций.

Для определения фактов можно использовать не только списочные структуры, но и шаблоны, которые напоминают простые записи. (Шаблоны в CLIPS не имеют ничего общего с шаблонами C++.)

Шаблон выглядит примерно так:

(deftemplate student "a student record"
(slot name (type STRING)) (slot age (type NUMBER) (default 18))

Каждое определение шаблона состоит из произвольного имени шаблона, необязательного комментария и некоторого количества определений слотов. Слот включает поле данных, например name, и тип данных, например STRING.

Можно указать и значение по умолчанию, как в приведенном выше примере.

Если в программу включено приведенное выше определение шаблона, то выражение:

(deffacts students
(student (name fred))
(student (name freda) (age 19)))

Приведет к тому, что в базу фактов после выполнения команды reset будет добавлено:

(student (name fred) (age 18)) (student (name freda) (age 19))

Определение функций

В языке CLIPS функции конструируются примерно так же, как в языке LISP (см. главу 4). Существенное отличие состоит в том, что переменные должны иметь префикс?, как это показано в приведенном ниже определении.

(deffunction hypotenuse (?a?b)
(sqrt (+ (?a?a) (?b?b)))

Формат определения функции в CLIPS следующий:

(deffunction <имя функции (<аргумент>… <аргумент>) <выражение>
<выражение>)

Функция возвращает результат последнего выражения в списке. Иногда выполнение функции имеет побочные эффекты, как в приведенном ниже примере.

(deffunction init (?day)
(reset)
(assert (today is?day)))

В результате после запуска функции на выполнение командой:

CLIPS> (init Sunday)

Будет выполнена команда reset и, следовательно, очищена база фактов, а затем в нее будет включен новый факт:

(today is Sunday).
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.