Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог_шпоры.docx
Скачиваний:
35
Добавлен:
27.09.2019
Размер:
103.66 Кб
Скачать

18.Отрицание в правилах Visual Prolog.

«Верный ли ответ на этот вопрос не знаю, но что нашла, то нашла=)»

Наиболее часто используемым стандартным предикатом Пролога, который может вызвать затруднение при программировании, является предикат отрицания not. Особенность отрицания в Прологе объясняется тем, что он не полностью соответствует понятию отрицания в математике. Эта разница может привести к непредвиденным ситуациям. Например, если заданы факты

human(ton).

human(ann).

и определен вопрос к системе "Боб не является человеком?":

Goal:not(human(bob)),

то Пролог-система ответит утвердительно, что не соответствует

действительности. В действительности же система не имеет доста-

точное количество информации, необходимой для ответа на данный

вопрос. В данном случае Пролог-система доказывает не истинность

заданной цели, а пытается доказать противоположное утверждение.

Если это доказать не удалось, то считается, что not-цель достигается успешно. Кроме того, предикат отрицания not в ТП не допускает ис-

пользования внутри себя неконкретизированной (свободной) переменной. В данном случае возникает ошибка ТП N 704.

19.Использование составных объектов в Visual Prolog. Простые и составные структуры.

Объекты утверждений (компоненты) представляют собой данные. Тип простых данных ограничен стандартными типами. Рассмотрим следующее утверждение:

любит (петр,музыка).

Оба объекта (петр, музыка) имеют простую структуру, они представляют самих себя. Любой объект, представляющий сам себя, называется простым объектом. Аналогично структура, состоящая из простых объектов, называется простой структурой.Объект, представляющий другой объект или совокупность объектов, называется составным объектом, а использующие такие составные объекты структуры - составными структурами.Возьмем утверждение

коллекция(“Иванов”,книга(“Использование Турбо-Пролога”,

”Ин,Соломон”,издание(“Мир”,1993))).

Предикат коллекция содержит составной объект книга, который в свою очередь содержит составной объект издание.

Описание указанных структур в программе может быть таким:

domains

личная_библиотека=книга(название,автор,издание)

издание=издание(издательство,год)

владелец,название,автор,издательство=symbol

год=integer

predicates

коллекция(владелец,личная_библиотека)

clauses

коллекция(“Иванов”,книга(“ИспользованиеТурбо- Пролога”, ”Ин,Соломон”,издание(“Мир”,1993))).

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

Примеры возможных запросов к приведенной программе:

Какие книги есть в коллекции Иванова?

коллекция(“Иванов”,X).

Кто автор книги “Использование Турбо-Пролога”?

коллекция(_,книга(“Использование Турбо-Пролога”,X,_)).

Можно создать набор правил, которые делали бы взаимодействие с базой данных более удобным, например:

книга(Название,Автор,Издание):-коллекция(_,книга(Название,Автор,Издание)).

издание(Издательство,Год):-книга(_,_,издание(Издательство, Год)).

год_издания(Год):-издание(_,Год).

Эти правила можно использовать, например, в следующих запросах:

Кто автор книги “Использование Турбо-Пролога”?

книга(“Использование Турбо-Пролога”,X,_).

Есть ли в коллекции Иванова книги 1990 г. издания?

коллекция("Иванов",X),издание(_,1990).

Примечание: соответствующие предикаты для созданных правил должны быть определены в разделе predicates.