![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
CLAUSES. likes(john, computers).
likes(ellen, reading). likes(john, computers). likes(john, badminton). likes(leonard, badminton). likes(eric, swimming). likes(eric, reading). 2. Рассмотрите такой запрос: Is there a person who likes both reading and swimming (Этот человек любит и чтение, и плавание)? likes(Person, reading), likes(Person, swimming). Пролог решит обе части этого запроса, просматривая в программе факты сверху вниз. В первой части запроса likes(Person, reading) переменная Person свободна; ее значение неизвестно до тех пор, пока Пролог не станет находить решение. С другой стороны, второй аргумент, reading, известен. Пролог ищет факт, который подходит для решения первой части запроса likes(ellen, reading) так как найдено соответствие (reading из факта сочетается с reading в запрос), Пролог привязывает свободную переменную Person со значением ellen. В то же время, Пролог помещает указатель в список фактов, показывая, насколько далеко продвинулась процедура поиска. Далее по очереди будет полностью удовлетворение запроса (нахождение человека, который любит и чтение, и плавание), для этого нужно выполнение второй части запроса, основываясь на выполнение первой. Так как Person теперь связана с ellen, Пролог должен искать следующий факт likes(ellen, swimming). Поиск Прологом этого факта ведется с начала программы, но такого факта не обнаруживается, так как его нет в программе. Следовательно, вторая часть запроса, когда Person - это ellen, не истинна. Пролог теперь «освобождает» Person и пытается найти другое решения первой части запроса, еще раз используя свободную переменную Person. Поиск другого факта, удовлетворяющего первую часть запроса, начинается с указателя в списке фактов. Это возвращение к последнему отмеченному месту известно как отслеживание в обратном порядке. Пролог ищет следующего человека, который любит чтение, т.е. пытается найти факт подобно likes(eric, reading). Переменная Person теперь связана с eric, и Пролог еще раз пытается удовлетворить вторую часть запроса, ища в программе факт подобно следующему: likes(eric, swimming). 3. На этот раз соответствие полностью найдено, и запрос полностью удовлетворен. Пролог выдаст ответ (рис. 1): Person=eric 1 Solution
Рис. 1. Вывод результата к вышеописанной программе
4. Рассмотрим следующий пример и составим новое отношение-правило дед(X, Y) и определим, кто является дедушкой Кати. Заданы отношения-факты: родитель(“иван”, “катя”). родитель(“анна”, “олег ”). родитель(“олег”, “дима”). родитель(“игорь”, “ольга”). родитель(“олег”, “виктор”). родитель(“игорь”, “иван”). мужчина(“дима”). мужчина(“иван”). мужчина(“игорь”). мужчина(“олег”). мужчина(“виктор”). женщина(“катя”). женщина(“ольга”). женщина(“анна”). 5. Опишем разделы доменов и предикатов.
|