Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Упражнения

Напишите предложения на естественном языке, соответствующие тому,

что могут значить эти Пролог'овские факты для умного читателя. (Помните,

что для компьютера эти факты являются просто отдельными "кусками" инфор-

мации, которые могут быть использованы для получения ответов на запросы.)

(Для облегчения восприятия все упражнения приведены на русском языке.)

1. любит (джеф, рисование).

2. мужчина (джон).

3. здание ("Строительная империя", нью-йорк).

4. человек (Иванов, Вася, "111000 Москва", "ул.Разина", 4445566).

Запишите факты Турбо Пролога, соответствующие следующим предложениям

естественного языка:

1. Эллен нравятся макароны.

2. Сан-Франциско находится в Калифорнии.

3. Номер телефона Ани - 476-02-99.

4. Отца Лены зовут Альфонсо Гренальди.

Из естественного языка в программы на Прологе

В первой части данной главы мы говорили о фактах и правилах, связях,

общих положениях и запросах. Все эти термины являются частью логики и ес-

тественного языка. Теперь же обсудим те же самые идеи, но с большим ис-

пользованием чистых терминов Пролога, таких как предложения, предикаты,

переменные и цели.

Предложения (факты и правила)

По сути, есть только два типа фраз, составляющих язык Пролога: фраза

может быть либо фактом, либо правилом. Эти фразы в Прологе известны под

термином "предложения". Сердце программ на Прологе состоит из предложе-

ний.

Подробнее о фактах

Факт задает единичный пример свойства объекта или связи между объек-

тами. Факт "самодоказателен": Прологу не нужно искать дополнительного

подтверждения факта, и, поэтому, он может быть использован в качестве ос-

новы для вывода.

Подробнее о правилах

В Прологе, как и в обычной жизни, часто можно доказать истинность

какого-либо положения его выводом из других фактов. Пролог считает, что

описание порядка нахождения вывода, - является правилом. Правило - это

свойство или связь, являющиеся истинной, когда известно некоторое множес-

тво других связей.

Примеры правил

Для простоты восприятия все примеры приводятся на русском языке)

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

определения пригодности для Дианы одного из пунктов меню.

Диана - вегетарианка и ест только то, что ей советует ее доктор.

Взяв меню и это правило вы можете решить, подходит ли Диане ка-

кой-либо пункт меню. Для того, чтобы сделать это, вы должны прове-

рить, соответствует ли пункт меню заданным ограничениям:

а. Пункт-меню относится к овощам?

б. Пункт-меню есть в списке доктора?

в. Заключение: если оба ответа положительны, то данный пункт меню

подходит Диане.

В Прологе связь, аналогичная данной, должна быть представлена в виде

правила, т.к. заключение опирается на факты. Ниже приведен один из спосо-

бов написания такого правила:

диана_может_есть (пункт_меню) if

овощ (пункт_меню) and

в_списке_доктора (пункт_меню).

2. Предположим, вы хотите сообщить Прологу, что Человек 1 - это ро-

дитель Человека 2. Это достаточно легко; просто задайте Прологу факт:

родитель (пауль, саманта).

Здесь показано, что Пауль является родителем Саманты. Однако предпо-

ложим, что в вашей базе данных уже есть факт, задающий связь "отец". Нап-

ример, "Пауль - отец Саманты"):

отец (пауль, саманта).

А кроме этого у вас есть факт, устанавливающий связь "мать" ("Жюли

мать Саманты"):

мать (жюли, саманта).

Если у вас есть набор фактов, устанавливающих связи мать /отец, то

ввод в базу данных каждой связи для родителей будет бесполезной тратой

времени.

Так как вы знаете, что Человек 1 является родителем Человека 2, и

если Человек 1 - отец Человека 2 или Человек 1 - мать Человека 2, то по-

чему бы не написать правило, которое будет все это учитывать? После того,

как эти условия сформулированы на естественном языке, закодировать их в

правило Пролога (для получения этой же связи) очень просто.

родитель (Человек 1, Человек 2) if

отец (Человек 1, Человек 2).

родитель (Человек 1, Человек 2) if

мать (Человек 1, Человек 2).

Данные правила Пролога утверждают, что:

- Человек 1 является родителем Человека 2,

если Человек 1 - отец Человека 2;

- Человек 1 является родителем Человека 2,

если Человек 1 - мать Человека 2.

3. Другой пример:

Человек может купить машину, если

ему нравится какая-то машина, и если

эта машина продается.

Данное предложение естественного языка может быть задано в Прологе с

помощью следующего правила:

может_купить (Имя, Модель) if

человек (Имя) and

машина (Модель) and

нравится (Имя, Модель) and

продается (Модель).

Данное правило раскрывает следующую связь:

Имя может_купить Y if

Имя - это человек and

Модель - это машина and

Имени нравится Y and

Модель - продается.

Данное правило Пролога будет истинным, если все четыре условия в его

теле - истинны. Ниже представлена программа поиска решений проблемы по-

купки автомобиля:

/*Программа CH03EX02.PRO*/

predicates

can_buy (symbol, symbol) /*может_купить*/

person (symbol) /*человек*/

car (symbol) /*машина*/

likes (symbol, symbol) /*нравится*/

for_sale (symbol) /*продается*/

clauses

can_buy (Name, Model) if

person (Name) and

car (Model) and

likes (Name, Model) and

for_sale (Model).

person (kelly).

person (judy).

car (lemon).

car (hot_rod).

likes (kelly, hot_rod).

likes (judy, pizza).

for_sale (pizza).

for_sale (lemon).

for_sale (hot_rod).

Что могут купить Judy и Kelly? Кто может купить hot_rod? На пригла-

шение Goal: вы можете задать следующие вопросы:

can_buy (Who, What).

can_buy (judy, What).

can_buy (kelly, What).

can_buy (Who, hot_rod).

Эксперимент! Добавьте факты, а может быть даже одно-два правила к

этой Пролог-программе. Проверьте новую программу теми же вопросами, что и

раньше. Пролог отвечает именно то, что вы и ждали?

Соседние файлы в папке Документация