Программирование на языке CLIPS



             

· База правил содержит операторы - часть 5


CLIPS> (run) FIRE 1 start: f-0 hello, world

В этом сообщении в строке, начинающейся с FIRE, выведена информация об активизированном правиле: start— это имя правила, а f-0— имя факта, который "удовлетворил" условие в этом правиле. Команда watch позволяет организовать несколько разных режимов трассировки, с деталями которых вы можете познакомиться в Руководстве пользователя. Если перед запуском программы вы ввели

CLIPS> (dribble-on "dribble.dp")

TRUE

то выведенный протокол трассировки будет сохранен в файле dribble.dp. Сохранение протокола прекратится после ввода команды

CLIPS> (dribble-off)

TRUE

Это очень удобная опция, особенно на этапе освоения языка

А.2.4. Использование шаблонов

Для определения фактов можно использовать не только списочные структуры, но и шаблоны, которые напоминают простые записи. (Шаблоны в 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))

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

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

(deffunction hypotenuse (?a ?b)

(sqrt (+ ( ?a ?a) ( ?b ?b)) )

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

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




Содержание  Назад  Вперед