Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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. Опишите алгоритм унификации.
|