Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Clauses






written_by(flemming, “DR NO”).

written_by(melville, “MOBY DICK”).

book(“MOBY DICK”, 250).

book(“DR NO”, 310).

long_novel(Title): - written_by(_, Title), book(Title, Length), Length > 300.

Так как X и Y - свободные переменные в цели, а свободные переменные могут быть унифицированы с любыми другими параметрами (даже другими свободными переменными), запрос (цель) может быть объединена с первым written_by предложением в программе:

written_by(X, Y).

| |

written_by(flemming, " DR NO").

 

2. Пропишите следующую цель:

written_by(X, Y), written_by(flemming, " DR NO").

Visual Prolog связывает X с flemming, а Y с " DR NO". В этом случае, Visual Prolog выдаст X=flemming, Y=DR NO.

Так как при использовании внешней цели Visual Prolog ищет все решения, то данная цель также унифицируется и со вторым предложением written_by: written_by(melville, " MOBY DICK") и Visual Prolog выдаст второе решение (рис. 2):

X=melville, Y=MOBY DICK

2 Solutions.

 
 

Рис. 2. Вывод программы

 

3. Задайте следующую цель:

written_by(X, " MOBY DICK").

Visual Prolog попробует сначала сопоставить цель с первым предложением written_by:

written_by(X, " MOBY DICK").

| |

written_by(flemming, " DR NO").

Так как " MOBY DICK" и " DR NO" не соответствуют, это предложение отпадает. Тогда Visual Prolog начинает рассматривать следующий факт:

written_by(melville, " MOBY DICK").

В данном случае происходит унификация, и X принимает значение melville(рис. 3).

 

 
 

Рис. 3. Вывод результата

 

4. Рассмотрим, как Visual Prolog выполнит следующую цель:

long_novel(X).

Пропишите эту цель в программе. Пролог выдаст ответ (смотрите рис. 4).

Когда Visual Prolog будет пытаться выполнить цель, он исследует, действительно ли запрос может соответствовать факту или голове правила. В этом случае, соответствие будет с

long_novel(Title).

Visual Prolog просматривает предложения для long_novel, пробуя найти соответствие, унифицируя аргументы. Так как X не связана с целью, свободная переменная X может быть унифицирована с любым другим аргументом. Title также не является связанным с long_novel. Цель соответствует голове правила и происходит унификация. Далее Visual Prolog будет пытаться удовлетворять подцели к правилу:

long_novel(Title): -

written_by(_, Title),

book(Title, Length),

Length > 300.

Удовлетворяя тело правила, Visual Prolog вызывает первую подцель в теле правила, written_by(_, Title). Запрос written_by(_, Title) становится текущей подцелью и Пролога ищет решение этого запроса.

Для решения этой подцели Пролог перебирает все факты. В данном случае достигается унификация с первым фактом:

written_by(_, Title),

| |

written_by(flemming, " DR NO").

Переменная Title привязывается к значению " DR NO" и следующая подцель, book(Title, Length), вызывается с этим значением переменной.

Теперь Visual Prolog начинает следующий поиск, пробуя выполнить запрос book. Так как Title имеет значение " DR NO", фактически запрос представляет собой book(" DRNO", Length). Обратите внимание, что первая попытка сопоставления с book(" MOBY DICK", 250) будет неудачна, и Visual Prolog перейдет ко второму предложению book в поисках соответствия. В данном случае удовлетворяется подцель и VisualProlog связывает переменную Length со значением 310.

Теперь текущей подцелью становиться третье предложение в теле long_novel:

Length > 300.

После сравнения Visual Prolog возвращает положительный результат; 310 больше чем 300. В этом случае, все подцели в теле правила выполняются, и поэтому запрос long_novel(X) выполняется. Так как X в запросе был унифицирован с переменной Title в правиле, значение, с которым Title был связан, передается запросу и унифицируется с переменной X. Title имеет значение " DR NO", поэтому Visual Prolog выдаст следующий результат (рис. 4):

X=D RNO

1 Solution.

 

 
 

Рис. 4. Ответ на запрос

 

Контрольное задание:

Разработайте алгоритм сохранения недоказанных целей в списке НЕУДАЧИ. Если искомая цель будет обнаружена в списке НЕУДАЧИ, то должен быть прекращен поиск и активирован возврат.

Контрольные вопросы:

1. Что такое унификация?

2. Что исследует Пролог при выполнении цели?

3. Какими процедурами осуществляется унификация?

4. Опишите алгоритм унификации.

 

 

 







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.