Представление знаний в интеллектуальных системах
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
?ными множествами гипотез заведомо эффективнее общего метода доказательства теорем, не использующего иерархической структуры данных. Процедура вывода схематически изображена на следующем рисунке.
34.Язык Prolog. Синтаксис списков
Списки - это последовательности символьных элементов, которые сами могут быть списками. Эти структуры данных очень полезны и популярны в символьном программировании и в ИИ. В прологе для записи списков используют символьный атом [] пустого списка и пары с точками - бинарные функциональные термы. Точка - имя функции. Например, списками являются: [] .(a,X) .(a,.b[]))
Рекурсивное определение:
атом [] является списком и представляет пустой список,
если L - список и Т - произвольный терм, то .(T,L) - список с головой Т и хвостом L.
Например, список, состоящий из элементов a,b и с есть терм вида .(a,.(b,.(c,[])))
Однако для списков существует несколько лучший синтаксис:
символьный атом [] представляет пустой список,
непустой список - это последовательность термов, разделённых запятыми и помещённых в квадратные скобки, причём термы любые, не обязательно атомы или списки.
Например, [a,b,c], [эта, маленькая(шапка),[для, кюре]]
Непустой список допускает две эквивалентные записи с точками и в квадратных скобках. Например, [a]?.(a,[]) [a,b,c]?.(a,.(b,.(c,[])))
Представление деревьями - одно и то же для обоих обозначений (см. рис. 6.3). Обозначение [T|Q] представляет собой список с заголовком Т и хвостом Q. [A,B,C|Q] представляет собой список с заголовком А,В,С и хвостом Q. Эти обозначения, использованные для удовлетворения целей, годны для анализа списков:
? - [T|Q]=[a].
- - > T=a, Q=[]
? - [A1,A2,_,A4|Q]=[прекрасная, маркиза, ваши, прекрасные, глаза]
- - > А1= прекрасная, А2 = маркиза, А4 = прекрасные, Q=[глаза]
35.Сцепки. Фреймы и слоты. Явные фреймы. Функциональные фреймы
Сцепки.
Предположим, что мы хотим представить фразы
: Жак пишет книгу.
: Жак посылает эту книгу Мари.
: Мари читает эту книгу (которую Жак ей послал).
В БД с этими фразами использовались конкретизации Жак_2, Мари_4, Посылка_8 и Книга_22 для ссылок в объектном языке на имена концептов метаязыка, упомянутые в этих фразах. Если расширить БД, то добавятся новые концепты и дополнительная информация о них.
Для использования знаний полезно собрать все факты о данном концепте в одно множество, называемое сцепкой (по-английски Unit). В нашем элементарном примере сцепкам Жак_2, Мари_4 и Книга_22 будут соответствовать логические формулы:
Жак_2
Пишет(Жак_2, Книга_22)
Посылает(Жак_2, Мари_4, Книга_22)
Мари_4
Посылает(Жак_2, Мари_4, Книга_22)
Читает(Мари_4, Кника_22)
Книга_22
Пишет(Жак_2, Книга_22)
Посылает(Жак_2, Мари_4, Книга_22)
Читает(Мари_4, Кника_22)
Фреймы и слоты.
Если выразить эти фразы бинарными предикатами, то сцепки будут называться фреймами. Нам известно, что тернарный предикат
Посылает(Жак_2, Мари_4, Книга_22)
Преобразуется в произведение бинарных предикатов
Отправитель (Посылает, Жак_2)
Получатель(Посылает, Мари_4)
Объект(Посылает, Книга_22).
Концепту посылает соответствует следующий фрейм:
ФРЕЙМ
Посылает (объект)
Отправитель Жак_2 (слот_1)
Получатель Мари_4 (слот_2)
Объект Книга_22 (слот_3)
(атрибуты или (значения или
имена слотов) значения слотов)
Каждая пара (атрибут, значение) фрейма называется слотом или (имя_слота, значение_слота). Сам фрейм по-английски - slot-and-filter notation. В этих обозначениях различные слоты сгруппированы вокруг объекта, охарактеризованного фреймом.
Явные фреймы.
Мы знаем, что часто бывает полезно представление знаний с явным указанием всех ссылок. Именно поэтому мы постулировали в нашем примере существование вполне определенной Посылки_8. Фраза Жак посылает книгу Мари бинарными предикатами представляется так:
Посылка_8
Элем посылки
Отправитель Жак_2
Получатель Мари_4
Объект Книга_22
Следовательно, в процессе выявления ссылок можно не только дать явные значения аргументов и имена предикатов, но также имена, представляющие высказывания логических формул. Например, Посылка_8 - имя высказывания Посылает(Жак_2, Мари_4, Книга_22). Такой формализм называется явным фреймом. (по-английски case-frame).
Функциональны фреймы.
Мы уже показывали, что представление бинарными предикатами легко можно выразить в функциональной форме. Отношения между Посылка_8 и первоначальными аргументами для посылает можно выразить функциями на множестве посылок. Введем следующие функциональные обозначения для фреймов:
Посылка_8
элем : (элем_из посылок)
отправитель : Жак_2
получатель : Мари_4
объект : Книга_22
Форма элемент_из в слоте имеет имя элем для указания того, что описанный фреймом объект является элементом некоторого множества (в нашем примере это множество посылок). Определенный таким образом фрейм называется функциональным.
36.Язык Prolog. Представление списков
Список - это последовательность, составленная из произвольного числа элементов, например, энн, теннис, том, лыжи. На Прологе это записывается так
[энн, теннис, том, лыжи ]
Однако таково лишь внешнее представление списка. Как мы уже видели, все структурные объекты Пролога - это деревья. Списки не являются исключением из этого правила.
Каким образом можно представить список в виде стандартного прологовского объекта? Мы должны рассмотреть два случая: пуст