- •Общие сведения о Прологе, области применения, отличия Пролога от других языков программирования.
- •6. Утверждения программы Турбо-Пролога: факты и правила.
- •7. Раздел goal программы Visual Prolog.
- •8. Этапы программирования на Visual Prolog.
- •9.Декларативный и процедурный смысл программы на Прологе.
- •10.Сопоставление. Правила сопоставимости термов, структур.
- •12.Арифметика Visual Prolog. Арифметические функции.
- •13,14. Рекурсия в Visual Prolog. Пример рекурсивного правила (вычисление факториала, возведение числа в целую степень).
- •14.Рекурсия и эффективность рекурсивных правил на Visual Prolog .
- •15 Стандартные предикаты. Поточный шаблон стандартных предикатов.
- •16.Стандартные предикаты ввода-вывода в Прологе.
- •17.Отсечение в программах на Прологе.
- •18.Отрицание в правилах Visual Prolog.
- •19.Использование составных объектов в Visual Prolog. Простые и составные структуры.
- •20. Списки как основная структура данных в Visual Prolog. Описание списков. Голова и хвост списка .
- •23. Преобразование строки в список символов или атомов.
- •Преобразование строки в символ
- •24.Преобразование данных из одного типа в другой.
- •Преобразование строки в символ
- •25. Преобразование, определяемые пользователем. Пользователь может определить преобразование, не предусмотренные предикатами. Например: целые числа в действительные и наоборот.
- •26. Предикаты Visual Prolog для работы с файлами.
- •27. Описание файловых доменов, переадресация внешних устройств.
- •28. Запись данных в файл на Visual Prolog
- •29. Чтение данных из файла на Visual Prolog
- •30. Дозапись данных в конец существующего файла на Visual Prolog.
- •31.Создание меню средствами Visual Prolog.
- •32.Способы организации цикла в программах на Прологе.
- •33.Создание динамических баз данных средствами Visual Prolog.
- •34. Статические и динамические базы данных в программах на Visual Prolog.
- •35.Способы занесения информации в динамическую базу данных на Visual Prolog.
- •36.Предикаты Турбо-Пролога для работы с базой данных.
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.