Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prolog_metod(v5).doc
Скачиваний:
25
Добавлен:
17.08.2019
Размер:
805.89 Кб
Скачать

2.3.Составные объекты

Составные объекты или структуры состоят из имени структуры-функтора и нескольких компонент структуры, которые могут быть любыми объектами, в том числе структурами.

Задание 3.1

Нарисуйте деревья для структур:

авто(марка('ВАЗ',2108),цвет(синий),цена($(7500))).

имеет(студент('Олег'),книга('Грибоедов','Горе от ума')).

Задание 3.2

  1. Введите базу:

имеет('Олег', книга('Пушкин','Капитанская дочка')).

имеет('Лена', книга('Монтень','Опыты')).

имеет('Ира',платок(синий)).

имеет('Лена', платок(красный)).

ЗАМЕЧАНИЕ. Для создания операторной формы предиката с функтором Name можно воспользоваться встроенным предикатом op(Precedence, Type, Name), где Precedence – приоритет вводимого оператора (целое неотрицательное число), Type – тип вводимого оператора (инфиксный, постфиксный и т.п.). Операторная форма позволяет записывать факты, запросы и правила в операторном виде. Разъясним это на примере.

?-op(550,xfx,имеет).

Здесь тип xfx значит, что оператор имеет не обладает ни правой, ни левой ассоциативностью (в отличие от случаев xfy и yfx соответственно). После выполнения такого запроса можно ввести вышеуказанный факт в виде:

'Олег' имеет книга('Пушкин','Капитанская дочка').

Так же можно написать запросы в функциональной и операторной формах:

?- имеет(Б,Ъ).

Б = 'Олег',

Ъ = книга('Пушкин', 'Капитанская дочка').

?- Б имеет Ъ.

Б = 'Олег',

Ъ = книга('Пушкин', 'Капитанская дочка').

Как видно из выполнения запросов операторная и функциональная формы записи предикатов дают один и тот же результат. Подробнее о предикате op/3 можно прочитать во встроенной справке (для запуска справки можно использовать запрос ?-help(op). или ?-help(op/3).).

  1. Задайте вопросы к этой базе данных:

Кто имеет какую-нибудь книгу Монтеня?

Кто какую книгу имеет?

Кто что имеет?

Верно ли, что Лена имеет синий платок?

2.4.Отрицание в прологе

Логическая операция "не" - отрицание в SWI/PROLOG - обозначается через not и применяется к предикатам. Отрицание некоторого предиката является истинным, если невыполнимым является исходный предикат, т.е. не существует возможности доказательства его истины.

База знаний Пролога описывает замкнутый мир объектов и отношений, поэтому отрицательный ответ на вопрос может обозначать как логическую ложь, так и ответ "не знаю".

Чаще всего операция not используется в определении цели "проверка" в схеме программирования "метод генерации и проверки", который состоит в порождении множества кандидатов в решение и дальнейшей их фильтрации:

решение(X):-кандидат(X),проверка(X).

Задание 4.1

Задайте к базе из задания 1.5 запросы:

Кто живет ровно в одной среде обитания?

Кто живет хотя бы в двух (ровно в двух) средах обитания?

Задание 4.2

  1. Опишите базу знаний на Прологе со следующими фактами:

    Иван имеет 10000 руб.

    Иван имеет телевизор.

    Иван имеет машину-вишневую "Волгу".

    Иван имеет магнитофон.

    Петр имеет 5000 руб.

    Петр имеет телевизор.

    Петр имеет холодильник.

    Коля имеет 20000 руб.

    Коля имеет телевизор.

    имеет('Иван',rub(10000)).

    имеет('Иван','телевизор').

  2. Задайте к ней вопросы:

Что имеет Петр?

Кто имеет 10000 рублей?

Кто что имеет?

Какие вещи имеет Иван, которых нет у Николая?

(Деньги - не вещь)

  1. Добавьте к этой базе данных следующие факты:

Цена машины "Волга"-32000.

Цена телевизора- 8400.

Цена холодильника - 4200.

Цена магнитофона - 3500.

Цена видео - 12000.

Цена приемника - 1300.

Цена часов - 500.

  1. Задайте к расширенной базе вопросы:

Может ли Петр купить видео?

У кого больше всего денег?

  1. Введите правило, определяющее, что некто может купить вещь, если у него хватит денег и этой вещи у него нет.

  2. Задайте вопросы:

Что может купить Коля?

Что может купить Коля из того, что имеет Иван?

  1. Добавьте к базе следующие факты:

Анна является женой Коли.

Мария является женой Ивана.

Ольга является женой Петра.

  1. Введите правило, что "у жены есть все, что есть у мужа".

  2. Задайте вопросы:

Имеет ли Мария машину?

Что может купить Анна, чего не имеет Мария?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]