Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Представление знаний в информационных системах.doc
Скачиваний:
18
Добавлен:
08.11.2018
Размер:
865.28 Кб
Скачать

Настоящие методические указания для выполнения лабораторных работ по дисциплине «Представление знаний в информационных системах» включают в себя 4 лабораторных работы, пояснения для выполнения заданий и варианты заданий для лабораторных работ. Методические указания предназначены для студентов дневной и заочной формы обучения по направлению 654700 «Информационные системы» (специальность 230201 «Информационные системы и технологии»).

Содержание

Содержание 2

Введение 3

Работа № 1. Явные методы представления знаний 4

Работа № 2. Методы поиска 17

Работа № 3. Анализ работы ЭС, разработанных на CLIPS 30

Работа № 4. Разработка классификационной экспертной системы на CLIPS. 39

Варианты. 42

Лабораторная работа № 1. 42

Лабораторная работа № 2. 45

Лабораторная работа №3, 4. 45

Рекомендуемая литература 53

Введение

Настоящие методические указания по дисциплине «Представление знаний в информационных системах» содержат четыре лабораторных работы. Методические указания устроены так, чтобы каждая лабораторная работа позволяла познакомиться с одним или несколькими понятиями из области представления знаний и способами реализации этих понятий на языке представления знаний CLIPS.

CLIPS – инструмент для разработки ЭС, созданный специалистами NASA в 1986 г. CLIPS создавался для того, чтобы сделать более удобной разработку программного обеспечения моделирующего поведение человека-эксперта в определенной предметной области. В состав CLIPS входят оболочка экспертной системы, редактор кода и средство для отладки приложений. Оболочка экспертной системы CLIPS включает следующие базовые элементы: база фактов и база экземпляров объектов для хранения данных; база правил или база знаний для хранения отношений связывающих факты предметной области (эвристик); система логического вывода для осуществления контроля работы правил. Базовые структуры языка CLIPS упомянуты и разъяснены в текстах лабораторных работ. Детали синтаксиса оставляются на самостоятельное изучение, поскольку есть хорошие руководства ([1-5],[9]), в которых можно отыскать любую использованную в методических указаниях конструкцию и прочесть о её функциональности и условиях использования.

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

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

Работа № 1. Явные методы представления знаний

Методы представления знаний можно разделить на явные и неявные. Явные методы представления знаний позволяют структурировать проблемную область, выделив в ней некоторые концептуальные объекты, и описать характеристики и способы взаимодействия этих объектов между собой. Для того чтобы рассуждать об отдельных элементах (объектах и группах объектов) получившейся структуры применяются заранее определенные для данного способа представления знаний правила. Таким образом, как сама структура, так и способы её интерпретации «прозрачны» для программиста, воспользовавшегося явным способом представления знаний, а при некоторой, посильной для программиста дополнительной работе и для пользователя, который применил систему, основанную на выбранном явном способе представления знаний. Неявные способы представления знаний не позволяют сформулировать способы отражения проблемной области, которой предполагается оперировать, во внутреннюю структуру, используемую для представления знаний об этой проблемной области. Пользователю системы, построенной на основе одного из неявных способов представления знаний доступны входные и выходные данные; иногда у него также имеется возможность влиять на процесс рассуждения подстройкой одного или нескольких параметров, но эти параметры не соответствуют каким-либо объектам или характеристикам объектов проблемной области, для которой построена система.

Примеры явных и неявных методов представления знаний представлены в табл. 1.

Таблица 1. Методы представления знаний

Явные методы представления знаний

Неявные методы представления знаний

Исчисление высказываний

Нейросетевые методы

Исчисление предикатов

Семантические сети

Эволюционные методы (генетические алгоритмы)

Сценарии

Фреймы

Объектно-ориентированные методы

Концептуальные графы

Упомянутые явные методы делятся на две группы. К первой относятся формальные языки представления знаний: исчисление высказываний и исчисление предикатов. Становление искусственного интеллекта начиналось с разработки именно формальных языков, основа которых - сохранение истинности операций на корректно построенных выражениях. Однако дальнейшее изучение природы познания человеком окружающего мира подтолкнуло к развитию альтернативные теории, т.н. ассоционистские теории смысла, которые определяют значение объекта в терминах сети ассоциаций с другими объектами. К ассоционистским схемам представления знаний относятся: семантические сети, сценарии, фреймы и концептуальные графы.

Целью данной лабораторной работы является знакомство с явными методами представления знаний: семантическими сетями, сценариями, фреймами, концептуальными графами; а также опробование способов реализации на CLIPS различных методов представления знаний.

Задачи лабораторной работы.

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

  2. Нарисовать семантическую сеть с использованием падежных фреймов.

  3. Описать три фрейма, указанных в варианте.

  4. Нарисовать концептуальные графы для предложений заданного сообщения, над получившимися графами применить операции ограничения, объединения (и если необходимо, упрощения).

  5. Преобразовать получившийся граф в предложение исчисления предикатов.

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

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

Пример.

Сообщение: «Плотник Федоров ежедневно получает более 10 заказов на починку мебели, изготовленной из ДСП. Чаще всего приходится чинить столы и шкафы.»

Фреймы: «мебель», «офисная мебель», «компьютерный стол».

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

Наиболее удобным формализмом для описания ассоционистских схем представления знаний оказались графы. Семантическая сеть представляет знания посредством ориентированного графа, узлы которого соответствуют фактам или понятиям, а дуги – отношениям или ассоциациям между понятиями. Термин «семантическая сеть» объединяет несколько схем представлений, которые различаются способами именования узлов, связей и правилами вывода, которые определены над этими структурами.

Выделение понятий - особая сложная область, методы классификации предлагаются например в [6]. Классические подходы к классификации предлагают различные контрольные списки кандидатов в понятия (экземпляры понятий). Примером контрольного списка может служить следующий:

  1. люди (роли) - человеческие существа и их роли, выполняющие некоторые функции;

  2. предметы – осязаемые материальные объекты или группы объектов;

  3. события – то, что происходит с людьми или предметами в заданное время или последовательно;

  4. взаимодействия – то, что роли или предметы могут делать с другими ролями или предметами.

Заметим еще раз, что это только один из вариантов контрольных списков, есть и другие, которые включают также понятия места, времени, организации, концепции и пр.

Применив приведённый контрольный список, можно выделить в заданном сообщении следующие понятия:

  1. люди и роли: плотник, Фёдоров;

  2. предметы: мебель, ДСП, стол, шкаф;

  3. события: чинить (столы и шкафы; чаще всего)

  4. взаимодействия: заказ.

Отношения между понятиями в семантической сети могут быть стандартизованы как по общим принципам, так и в соответствие с требованиями предметной области. Можно предложить следующий контрольный список стандартизованных отношений между понятиями:

  1. «являться» – x является одним из X; например «Фёдоров является плотником».

  2. «принадлежать к категории» - категория понятий X принадлежит к категории понятий Y; например «шкаф – это мебель»;

  3. «состоять», «быть сделанным из» - x состоит из y и z; например «мебель изготовлена из ДСП».

  4. «обладать свойством» - x обладает свойством y со значением z; например (в разбираемом сообщении такого примера нет, поэтому приведём не относящийся к делу) «стол коричневый» – стол обладает свойством цвет со значением корицневый;

  5. количественная взаимосвязь – количество x (операция отношения: =; >; < и пр.) n; например: «более 10 заказов на починку мебели»;

  6. связь «агент-действие» – x делает y; x делает y над z; например, «Плотник Федоров чинит мебель».

Приведённые списки при необходимости могут быть расширены, однако для рассматриваемого сообщения они достаточны и позволяют построить следующую сеть (рис.1):

Рисунок 1. Пример семантической сети для заданного сообщения

  1. Выделить в семантической сети падежные фреймы.

Следующие работы по сетевым представлениям были ориентированы на стандартизацию сетевых отношений, которая позволила бы моделировать семантику естественного языка, сделав её частью формального представления знаний, а не только описания предметной области. Один из подходов определяет связи ролями существительных в описываемом предложении. В число ролей входят: агент, объект, инструмент, место и время. Предложение представляется набором узлов, один из которых соответствует глаголу-сказуемому, а остальные подлежащему, дополнениям, определениям. Такая структура получила название «падежного фрейма» и позволяет включить в язык представления правила построения предложений естественного языка. При разборе предложения программа находит сказуемое и сопоставляет ему падежный фрейм из базы знаний; затем остается «наложить» фрейм на анализируемое предложение, получив, таким образом, значения агента, объекта и пр. Исходные падежные фреймы могут обладать различной структурой, в зависимости от морфологической сложности анализируемого текста и целей анализа. Структуры, например, могут строиться не на основе сказуемого, а на основе отглагольного существительного или прилагательного.

Для нашего примера, в каждом из предложений можно выделить следующие падежные фреймы (рис. 2).

Рисунок 2. Выделенные падежные фреймы

  1. Описать три фрейма, указанных в варианте (для рассматриваемого варианта это фреймы «мебель», «офисная мебель», «компьютерный стол»).

Фреймы (не путать с падежными фреймами) схема представления знаний, которая включает строго организованные структуры данных, в которые включаются неявные информационные связи, которые присутствуют в предметной области. Фрейм, как организационная единица представления знаний отображает структуру объекта предметной области, которому соответствует фрейм. Сопоставляя фреймы и семантические сети можно сказать, что фрейм – это некоторая семантическая подсеть, которая представляет отдельный объект предметной области и его характеристики в заданном контексте или некоторую стереотипную ситуацию в предметной области. Механизм подобной организации обеспечивается слотами фреймов – поименованные ячейки, содержащие значение некоторой характеристики. Фрейм как структура данных для языков представления знаний подобен обычной записи для языков процедурного программирования или классу объектов для языков объектно-ориентированного программирования.

Ячейки (слоты) фрейма могут содержать следующую информацию.

1. Данные для идентификации соответствующего фрейму объекта или ситуации, к таким слотам, например, относится слот идентификатор – содержащий строковое наименование фрейма. Для нашего примера слот-идентификатор фрейма «Мебель» будет содержать наименование фрейма «Мебель».

2. Связь фрейма с другими фреймами. Слоты фрейма могут содержать в качестве значений другие фреймы. Например, одним из слотов фрейма мебель может быть основной материал, из которого изготовлен предмет мебели, каковой материал, в нашем случае ДСП, также может быть представлен в виде отдельного фрейма со своими свойствами: толщиной, удельным весом и пр. (заметим, что в исходном сообщении указано, что вся рассматриваемая мебель изготовлена их ДСП, поэтому, адекватным описанию проблемной области вариантом разработки фрейма является не включать «материал» в число его слотов). Другим типом взаимосвязи является наследование. Например, фрейм «офисная мебель» служит подвидом фрейма «мебель», другими словами «мебель» - суперкласс для «офисная мебель», а «офисная мебель» - подкласс «мебель».

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

4. Дескрипторы свойств для новых экземпляров фрейма. В число слотов-свойств для новых экземпляров фрейма «мебель» могут быть включены, например, размеры, цвет и пр. Значения слотов-свойств могут инициализироваться по умолчанию или оставаться незаполненными, поскольку, как в нашем случае для фрейма «мебель», при создании нового экземпляра фрейма имеют смысл только значения прямо указанные пользователем системы.

5. Процедурная информация об использовании фрейма, некоторый код, который должен выполняться при инициализации определённых свойств фрейма. Процедур, подключённые к фрейму, и запускаемые при обновлении информации в структуре называются демонами, процедуры, запускаемые на выполнение по запросу пользователя называются демонами по требованию, процедуры, запускаемые на выполнение при появлении значения слота называются демонами добавления. Например, для фрейма «мебель» можно запрограммировать демона, который вычислял бы цену доставки в зависимости от размера.

6. Информация по умолчанию. Значения, которыми инициализируются слоты фрейма, если прямо не указаны противоположные. Например, для фрейма «мебель», если мы всё-таки решим ввести в него слот «материал», материалом по умолчанию в соответствие с контекстом задачи будет «ДСП».

Результатом описания фреймов, указанных в варианте может быть, например, следующая схема (рис. 3).

Рисунок 3. Фреймы "Мебель", "Офисная мебель", "Компьютерный стол"

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

  1. Нарисовать концептуальные графы для предложений заданного сообщения, над получившимися графами применить операции ограничения, объединения (и если необходимо, упрощения).

Концептуальные графы – один из сетевых языков, явившихся результатом дальнейшего исследования семантических сетей. Концептуальные графы были преложены для решения задач представления смысла и представляют собой конечные связанные двудольные графы, в которых присутствуют узлы двух типов: узлы, представляющие понятия (обозначаются прямоугольниками), и узлы, представляющие концептуальные отношения (обзначаются овалами). Узлы понятий представляют собой конкретные (те, которые можно представить) или абстрактные понятия. Узлы концептуальных отношений описывают отношения между одним или несколькими понятиями. Каждый концептуальный граф представляет одно высказывание. В нашем примере: плотник, Федоров, ежедневно, получать, более 10, заказ, починка, мебель, изготовлена, ДСП – понятия. Концептуальные отношения между ними представлены следующим концептуальным графом (рис. 4).

Концептуальные графы позволяют также описывать отдельные поименованные экземпляры понятий. Для обозначения каждого экземпляра понятия используется специальный уникальный идентификатор, называемый маркером, в отличие от имен, которых у объекта может быть несколько, маркер экземпляра понятия - единствен. Например, понятие «плотник Фёдоров» может быть представлено следующими вариантами концептуальных графов

Рисунок 4. Именование экземпляров понятий.

Создание новых концептуальных графов на основе существующих производится применением операций копирования, ограничения, объединения и упрощения. Копирование позволяет создать новый граф, который является точной копией существующего графа. Ограничение позволяет заменить узлы понятий графа узлами, представляющими их специализацию. Ограничение производится путём замены общего маркера, которым помечено понятие, индивидуальным или замены метки типа меткой одного из его подтипов. Правило объединения позволяет «собрать» один граф из двух, заменяя узлы в одном из графов, идентичными узлами другого. Получившийся в результате объединения граф является менее общим, чем исходные графы. Если граф содержит два одинаковых отношения, такая ситуация может возникнуть, например, в результате объединения, то одно из них может быть удалено вместе со всеми дугами.

Создадим общий концептуальный граф для двух концептуальных графов, соответствующих предложениям разбираемого примера (рис. 6).

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

Факты – высокоуровневый способ представления знаний в CLIPS. Каждый факт представляет часть сведений о предметной области, и является базовое единицей информации, используемой правилами. Совокупность фактов, описывающих предметную область, составляет базу фактов задачи. Факты можно добавлять в базу фактов, удалять, модифицировать, копировать их. Количество фактов в базе фактов ограничено только доступной памятью компьютера. Факты бывают упорядоченные и неупорядоченные. Упорядоченные (ordered) факты состоят из открывающего слова (поля, вернее значения некоторого неименованного поля) и последовательности полей, разделённых пробелами. Первое поле упорядоченного факта чаще всего определяет отношение, в котором находятся между собой все последующие поля упорядоченного факта. Примерами упорядоченных фактов будут следующие:

(Fedorov is a carpenter); Фёдоров - плотник

(repair Fedorov furniture); ремонт мебели производится Фёдоровым

(furniture table shelf book-case); мебель: стол, полка, книжный шкаф

Для того чтобы получить доступ к информации, которая задана упорядоченным фактом, пользователь должен знать не только о том, какие данные содержит факт, но и внутреннюю структуру факта, порядок следования его полей. Неупорядоченные факты, которые организуются в CLIPS с помощью структуры deftemplate (см. ниже), позволяют абстрагироваться от жесткого задания структуры факта, путём присвоения каждому из полей собственного имени. Поместить несколько фактов в базу фактов можно с использованием конструкции deffacts.

(deffacts <deffacts-name> [<comment>]

(<fact-name> <fact-value>)*)

Основные функции CLIPS, предназначенные для работы с фактами представлены в табл. 2.

Таблица 2. Основные функции для работы с фактами.

Синтаксис

Пример использования

Описание

(assert (<fact-name> <[fact-value]>*)*)

(assert (Fedorov is carpenter))

Помещает факт fact-name со значением fact-value, в базу фактов. CLIPS автоматически присваивает фактам последовательные индексы (1, 2 и т.д). В примере в базу фактов помещаются два факта. В базе фактов не может одновременно находиться два факта с одним и тем же именем factname.

(modify

(<fact-index>|fact-address>

(<fact-name> <fact value>*)*)*)

(modify 1 (shape triangle))

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

(retract

<fact-index>|fact-address>)

(retract 2)

(retract 1 2)

(retract *)

Удаляет факт из базы фактов по его индексу или адресу. Индексация фактов остается последовательной, пропуски, образовавшиеся вследствие удаления, не заполняются. ‘*’ вместо индекса обозначает удалить все.

(fact-existp

<fact-index>|fact-address>)

(fact-existp 1)

Проверяет, существует ли в базе факт с заданным индексом или адресом.

(fact-index

<fact-address>)

(fact-index ?f)

Возвращает индекс факта по его адресу

Например, основе семантической сети, созданной с использованием падежного фрейма со структурой (действие-агент-объект-время действия-место действия), можно построить следующий набор фактов:

(deffacts All

(is fedorov carpenter); Федоров - плотник

(get fedorov 10 orders everyday); Федоров получает 10 заказов ежедневно

(order repair furniture); заказ состоит в починке мебели

(made furniture DSP); мебель сделана из ДСП

(repair tables book-cases)); ремонтируются столы и шкафы.

Неупорядоченные факты могут быть представлены любой удобной в контексте задачи структурой, приведенный пример – только один из вариантов их устройства.

Сформулируем правило, которое оперировало бы с приведённой базой фактов и формировало бы новый факт содержащий информацию о том, что в контексте данной задачи считается мебелью.

Правила – основной метод представления знаний в CLIPS. Разработчик экспертной системы определяет правила, чтобы описать решение некоторой проблемы. С помощью правила назначается набор действий, которые должны быть выполнены в данной проблемной ситуации. Правило состоит из антецедента - левой части (LHS – left hand side) и консеквента - правой части (RHS – right hand side). Антецедент представляет собой набор условий, а консеквент – набор действий которые необходимо предпринять в том случае если условия выполняются.

Конструкция CLIPS defrule предназначена для того, чтобы создавать правила.

(defrule <rule-name> [<comment>]

[<declaration>] ; свойства правила

<conditional-element>* ; антецедент

=>

<action>*) ; консеквент.

Антецеденты в правилах представлены с помощью образцов (patterns) – наборов простых ограничений на содержание базы фактов. Соответствие каждому из ограничений ведет к активизации правила. Процесс определения правил, активных на следующем шаге работы программы, называется поиском соответствия образцу (pattern-matching).

Наше правило будет выглядеть следующим образом

(defrule WhatIsFurniture

((order ?what_ordered ?obj)

(?what_ordered ?$items))

=>

(assert (?obj are ?items))

Работает оно так:

1) ищет в базе фактов паттерн соответствующий факту-заказа. Нам, как разработчикам и базы фактов и базы правил для этой условной системы, известно его название – order и его внутренняя структура (order что-делаем над-чем-делаем). Мы вводим две переменные: в переменную ?what_ordered – запоминаем производимое в соответствие с заказом действие, а в переменную ?obj – запоминаем субъект, над которым производится действие;

(order ?what_ordered ?obj)

2) ищет в базе фактов паттерн, соответствующий факту, содержащему информацию о том, какие конкретно объекты ?$items(объекты помещаются в эту новую переменную; префикс ?$ - обозначает переменную, содержащую несколько значений, массив) чаще всего подвергаются действию, составляющему предмет заказа;

(?what_ordered ?items))

3) из соответствующих образцам фактов – в правой части правила составляется и помещается в базу фактов с помощью функции assert факт сопоставляющие общее название предмета заказа, конкретным наиболее часто заказываемым объектам.

(assert (?obj are ?items))

В результате в базе фактов окажется факт

(furniture are tables book-cases)

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

Неупорядоченные факты представляются с помощью упомянутой выше структуры deftemplate. Неупорядоченные факты предоставляют возможность абстрагироваться от внутренней структуры факта путем назначения имен каждому полю факта. Конструкция deftemplate используется для создания шаблона, к информационным полям которого можно обращаться по их именам. Конструкция deftemplate является аналогом структуры типа запись (record и struct в Паскале и Си, соответственно). В отличие от упорядоченных фактов для слотов (полей) структуры deftemplate можно определить тип данных содержимого, перечислить возможные значения, которыми слот может быть проинициализирован, для них могут быть определены значения по умолчанию. Главным отличием фактов, построенных с использованием структуры deftemplate, от упорядоченных фактов является первое поле факта, которое для первых должно соответствовать имени структуры deftemplate, экземпляром которой является факт, а для последних может быть любым допустимым символом CLIPS. Последующие поля в неупорядоченных фактах – список проинициализированных слотов.

Синтаксис структуры deftemplate представлен ниже.

(deftemplate <deftemplate-name> [<comment>] <slot-definition>*)

<slot-definition> ::= <single-slot-definition> |<multislot-definition>

<single-slot-definition>::= (slot <slot-name> <template-attribute>*)

<multislot-definition>::= (multislot <slot-name> <template-attribute>*)

<template-attribute> ::= <default-attribute> |

Конструкция включает именованные слоты (slot-name), аналогичные полям записи. Слоты могут хранить одно (single-slot) или несколько (multislot) значений, иметь значения по умолчанию (default-attribute). Также слоты можно типизировать и определять для них набор значений, так чтобы слот мог инициализироваться единственно значениями этого набора (constraint-attribute).

Например,

(deftemplate furniture

(slot name)

(multislot sizes))

(deftemplate furniture

(slot name)

(slot height)

(slot depth)

(slot width))

Создаём экземпляр факта:

(assert (furniture (name table) (sizes 0.75 1 1)))

Значение по умолчанию для слота представляется следующим образом.

<default-attribute>::=(default ?DERIVE|?NONE | <expression>*) |

(default-dynamic <expression>*)

Статическое значение по умолчанию задается с помощью ключевого слова default. В примере (default gensym*) значение функции–генератора уникальных значений считается и приписывается слоту id при помещении в базу фактов, то есть в течение времени выполнения программы является статическим. Динамическое (результат некой функции, который пересчитывается при каждом изменении факта) – с помощью ключевого слова default-dynamic.

Например,

(deftemplate

furniture

(slot name (default ?NONE))

(slot id (default gensym*))

(slot height (default 0.75)))

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

<constraint-attribute> ::= <type-attribute> |<allowed-constant-attribute> |<range-attribute> |<cardinality-attribute>|<default-attribute>

<type-attribute>::= (type <type-specification>)

<type-specification>::= <allowed-type>+ | ?VARIABLE

<allowed-constant-attribute>::= (allowedsymbols <symbol-list>) |

(allowedstrings <string-list>) |

(allowed-lexemes <lexeme-list> |

(allowedintegers <integer-list>) |

(allowedfloats <float-list>) |

(allowednumbers <number-list>)|

(allowed-instance-names <instance-list>) | (allowedvalues <value-list>)

<range-attribute>::= (range <range-specification> <range-specification>)

<range-specification> ::= <number> | ?VARIABLE

<cardinality-attribute>::= (cardinality <cardinality-specification> <cardinality-specification>)

<cardinality-specification> ::= <integer> | ?VARIABLE

Type-attribute позволяет назначать слотам типы данных CLIPS. Allowed-constant-attribute позволяет задавать ограничения на значения слотов, создавая набор значений или, для перечислимых типов, создавая ряд значений (range-attribute). Сardinality-attribute позволяет ограничивать размерность, слотов содержащих несколько значений.

Например,

(deftemplate furniture

(slot name (type SYMBOL) (allowed-values table book-case))

(slot height (type FLOAT) (range 1 2.5)))

или

(deftemplate furniture

(slot name)

(multislot sizes (cardinality 3)))

Конструкция deftemplate может быть ограниченно использована для представления фреймов в CLIPS. Представить фреймы с помощью этой структуры предлагается самостоятельно.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.