Представление знаний в интеллектуальных системах
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
? в виде отношения
удалить (Х, L, L1)
где L1 совпадает со списком L, у которого удален элемент Х. отношение удалить можно определить аналогично отношению принадлежности. Имеем снова два случая:
1)Если Х является головой списка, тогда результатом удаления будет хвост списка.
2)Если Х находится в конце списка, тогда его нужно удалить оттуда.
удалить (Х, [X | Хвост], Хвост).
удалить (Х, [Y | Хвост], [Y | Хвост1]) :-
удалить (Х, Хвост, Хвост1).
Как и принадлежит, отношение удалить по природе своей недетерминировано. Если в списке встречается несколько вхождений элемента Х, то удалить сможет исключить их все при помощи возвратов. Конечно, вычисление по каждой альтернативе будет удалять лишь одно вхождение Х, оставляя остальные в неприкосновенности. Например:
? - удалить (a, [a, b, a, с,a], L).= [b, a, с,a];= [a, b, с,a];= [a, b, a,с];
no
При попытке исключить элемент, не содержащийся в списке, отношение удалить потерпит неудачу.
Отношение удалить можно использовать в обратном направлении для того, чтобы добавлять элементы в список, вставляя их в произвольные места. Например, если мы хотим во всевозможные места списка [1, 2, 3] вставить атом а, то мы можем это сделать задав вопрос: Каким должен быть список L, чтобы после удаления из него элемента а получился список [1, 2, 3]?
?- удалить (a, L, [1, 2, 3] ).=[a,1, 2, 3];=[1,a, 2, 3];=[1, 2, a,3];
L=[1, 2, 3,a];
no
Вообще операция по внесению Х в произвольное месть некоторого списка Список, дающее в результате БольшийСписок, может быть определена предложением:
внести( Х, Список, БольшийСписок):-
удалить(Х, БольшийСписок, Список).
В принадлежит1 мы изящно реализовали отношение принадлежности через конк. Для проверки на принадлежность можно также использовать и удалить. Идея простая: некоторый Х принадлежит списку Список, если Х можно из него удалить:
принадлежит2(Х, Список) :-
удалить( Х, Список, _).
39.Функциональные атрибуты. Автоматические рассуждения, использующие фреймы. Иерархические рассуждения, использующие фреймы. Рассуждения с умолчаниями
Функциональные атрибуты
Атрибуты описывают множество характеристик связанных с функциями функционального фрейма. Атрибут не обязательно является конкретизацией некоторых данных вроде Жак_2; с тем же успехом он может быть функциональным выражением. Рассмотрим фразу Жак посылает книгу Мари, а Поль получает письмо от человека, которому Жак послал книгу. Ее первая часть выражается фреймом
Посылка_8
элем : (элем_из посылок)
отправитель : Жак_2
получатель : Мари_4
объект : Книга_22
Вторая часть представляется фреймом, для которого некое функциональное выражение является атрибутом отправителя:
Посылка_9
элем : (элем_из посылок)
отправитель : получатель(Посылка_8)
получатель : Поль_6
объект : Письмо_3
Мари_4 и получатель(Посылка_8) - два разных способа представления одного и того же лица.
Если пытаемся установить паросочетания между фреймами, содержащие функциональные выражения в качестве атрибутов, то следует предположить, что эти выражения получат значения сразу, как только это будет возможно. Присваивание значений осуществляется посредством ссылки на объект, указанный аргументом этой функции.
Предположим, что поставлен вопрос: Посылала ли Мари что-нибудь кому-нибудь?, представленный фреймом-целью
z(x)
элем : (элем_из посылок)
отправитель : Мари_4
получатель : х
объект : у
Множество фреймов-фактов содержат Посылку_8 и Посылку_9. Так как получатель(Посылка_8) может получить значение Мари_4, то фрейм Посылка_9 получит Мари_4 в качестве значения функции отправитель. Ответ на вопрос даст паросочетание фрейма Посылка_9 с фреймом z.
С помощью подстановки {(х, Поль_6), (у, Письмо_3)} можно получить ответ да, Мари отправила письмо Полю
Автоматические рассуждения, использующие фреймы
Только что мы рассмотрели, что атрибуты функций во фреймах не обязательно константы или конкретизации, но могут также быть функциональными выражениями. Сделаем еще шаг и рассмотрим еще одну возможность для атрибутов (представляющих множество связанных с объектами характеристик) - быть процедурами или подпрограммами. Это приводит нас к понятию объектно-ориентированных языков, предназначенных для автоматических рассуждений на основе объектного представления.
Язык KRL - объектно-ориентированный, основанный на представлении знаний фреймами. В нем все знания описаны в терминах UNITS-KRL. Ограничимся двумя примерами:
[Путешествие UNIT Абстрактное
]
[Путешествие UNIT Абстрактное
]
Первую часть можно интерпретировать следующим образом. Путешествие - абстрактное понятие, связанное с самолетом, машиной или поездом и имеющее некий город пунктом назначения. Вторую часть можно интерпретировать аналогично. KRL материализует некоторый процесс рассуждений, управляемый правилом паросочетания.
Иерархические рассуждения, использующие фреймы.
Операция паросочетания аналогична унификации из логики предикатов. Можно также связать объектное представление с более мощными правилами вывода, такими как теорема дедукции.
Рассмотрим лишь частный случай одного нередко используемого закона дедукции, в соответствии с которым с помощью импликации приписываются свойства каждому элементу опр?/p>