Определение 2.2.1. Синтаксис конструктора deftemplate 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Определение 2.2.1. Синтаксис конструктора deftemplate



 (deftemplate <имя-шаблона>[<необязательные-комментарии>] [<определение-слота>*])

<определение-слота>                ::= <определение-простого-слота>|<определение-составного-слота>

<определение-простого-слота>::= (slot <имя-поля> <атрибуты-шаблона>)

<определение-составного-слота>::= (multislot <имя-поля> <атрибуты-шаблона>)

<атрибуты-шаблона>                   ::= <атрибут-значение-по-умолчанию>|<атрибут-ограничения>

<атрибут-значение-по-умолчанию>::= (default?DERIVE I?NONE |<Выражение>)|

(default-dynamic <Выражение>)

Имена шаблонов и слотов должны быть значениями типа symbol, кроме того, на имена шаблонов распространяется запрет на использование некоторых слов.

Комментарии являются необязательными и, как правило, описывают назначения шаблона. Комментарии необходимо заключать в кавычки. Кроме данного типа комментариев в конструкторе deftempiate также применимы обычные комментарии CLIPS, начинающиеся с символа;. Отличие этих комментариев заключается в том, что комментарии, начинающиеся с сим­вола;, полностью игнорируются системой CLIPS, а комментарии, следую­щие после имени шаблона и заключенные в кавычки, сохраняются в базе знаний системы. Эти комментарии доступны при просматривании опреде­ления шаблона. Определим в среде CLIPS следующий шаблон:

Пример 2.2.2. Применение конструктора deftemplate

 (deftemplate MyObject "Template for storage name and location"

; Slots for storage name and location

(slot name);slot for name of object

(slot location); slot for location of object

Комментарии " Template for storage name and location " сохранены в памяти системы и отображаются вместе с определением шаблона.

Рис. 2.2.2. Использование комментариев в конструкторе deftemplate

Помимо ключевого слова slot, определяющего простой слот, допустимо также применение ключевого слова multisiot, для определения составного слота. Простой слот, или слот, предназначен для хранения единицы ин­формации одного из примитивных типов данных CLIPS. Составной слот способен хранить список подобных единиц информации неограниченного объема. Для доступа к конкретным данным, хранящимся в составном слоте, используются специальные групповые символы и функции, примеры и правила использования которых будут приведены ниже.

При создании шаблона с помощью конструктора deftemplate каждому полю можно назначать определенные атрибуты, задающие значения по умол­чанию или ограничения на значение слота. Рассмотрим эти атрибуты под­робней.

<Атрибут-значение-по-умолчанию> определяет значение, которое будет ис­пользовано в случае, если при создании факта не задано конкретное значе­ние слота. В CLIPS существует два способа определения значения по умол­чанию, поэтому в конструкторе deftemplate предусмотрено два различных атрибута, задающих значения по умолчанию: default и default-dynamic.

Атрибут default определяет статическое значение по умолчанию. С его по­мощью задается выражение, которое вычисляется один раз при конструиро­вании шаблона. Результат вычислений сохраняется вместе с шаблоном. Этот результат присваивается соответствующему слоту в момент объявления нового факта. В случае если в качестве значения по умолчанию используется ключевое слово?derive, то это значение будет извлекаться из ограничений, заданных для данного слота. По умолчанию для всех слотов установлен ат­рибут default?DERIVE.

В случае если в место выражения для значения по умолчанию используется ключевое слово?none, то значение поля обязательно должно быть явно за­дано в момент выполнения операции добавления факта. Добавление факта без определения значений полей с атрибутом default?none вызовет ошибку.

Атрибут default-dynamic предназначен для установки динамического значе­ния по умолчанию. Этот атрибут определяет выражение, которое вычисля­ется всякий раз при добавлении факта по данному шаблону. Результат вы­числений присваивается соответствующему слоту.

Простой слот может иметь только одно значение по умолчанию. У состав­ного слота может быть определено любое количество значений по умолча­нию (количество значений по умолчанию должно соответствовать количест­ву данных, сохраняемых в составном слоте).

Ниже приведен пример использования атрибута, устанавливающего значение по умолчанию:

Пример 2.2.3. Использование атрибутов значения по умолчанию

(deftemplate foo

(slot w (default?NONE))

(slot x (default?DERIVE))

(slot у (default (gensym*)))

(slot z (default-dynamic (gensym*))))

Статическая проверка выполняется во время использования определения шаблона некоторой командой или конструктором. Например, для записи значений в слоты шаблона. Иначе говоря, статическая проверка выполня­ется до запуска программы. При несоответствии используемых значений с установленными ограничениями пользователю выводится соответствую­щее предупреждение об ошибке.

Ссылка на индекс факта в командах на изменение значения факта или его дублирование не связывает факт с соответствующим шаблоном явно. Это делает статическую проверку неоднозначной. Поэтому в командах, использующих индекс факта, статическая проверка не выполняется.

Помимо статической, CLIPS также поддерживает динамическую проверку ограничений. Если режим динамической проверки ограничений включен, го все новые факты, созданные с использованием некоторого шаблона и имеющие определенные значения, проверяются в момент их добавления в список фактов.

Конструктор deffacts

Помимо конструктора deftemplates, CLIPS предоставляет конструктор deffacts, также предназначенный для работы с фактами. Данный конструк­тор позволяет определять список фактов, которые будут автоматически до­бавляться всякий раз после выполнения команды reset, очищающей теку­щий список фактов. Факты, добавленные с помощью конструктора deffacts, могут использоваться и удаляться так же, как и любые другие факты, добав­ленные в базу знаний пользователем или программой, с помощью команды assert.



Поделиться:


Последнее изменение этой страницы: 2021-03-10; просмотров: 38; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.147.124 (0.005 с.)