Лабораторный практикум пролог. Методические рекомендации по дисциплине Анализ данных
Скачать 311.21 Kb.
|
Пример 1. Имеется база данных, содержащая следующие факты: родитель(илья, марина). родитель(марина, ира). родитель(елена, иван). родитель(николай, ира). родитель(ольга, алексей). родитель(марина, саша). родитель(сергей, иван). Определить: верно ли, что Марина является родителем Саши; верно ли, что Алексей является родителем Ольги; кто является ребенком Николая; кто родители Ивана; всех родителей и их детей. Решение. Запустите среду Visual Prolog. Закройте окно проекта (если оно открыто) и откройте новый файл (File|New) (рис.2) В появившемся окне наберите текст программы, содержащий разделы: PREDICATES (описание предиката родитель), CLAUSES (перечисляются имеющиеся факты) и GOAL (запрос). рис.2. Рабочее окно редактора DOMAINS имя=symbol родитель(имя, имя) PREDICATES nondeterm CLAUSES родитель(илья, марина). родитель(марина, ира). родитель(елена, иван). родитель(николай, ира). родитель(ольга, алексей). родитель(марина, саша). родитель(сергей, иван). GOAL родитель(марина, саша) Запустите и протестируйте программу с помощью команды Project | Test Goal (можно использовать кнопку на панели инструментов рис3. Окно вывода результата Указание: перед следующим запуском программы следует закрыть это окно. Для ответа на вопрос: верно ли, что Алексей является родителем Ольги, измените запрос: GOAL родитель(алексей, ольга). После запуска программы (Project | Test Goal) будет получен ответ: no Для ответа на вопрос: кто является ребенком Николая, запишите цель: GOAL родитель(николай, X) . Результат: Х=ира 1 Solution Для ответа на вопрос: кто родители Ивана, укажите запрос: GOAL родитель(Х, иван), родитель^, иван), X<>Y. Результат: Х=елена, Y=сергей Х=сергей, Y=елена 2 Solutions Для определения всех родителей и их детей, запишите: GOAL родитель(Х, Y). Результат: Х=илья, Y=марина Х=марина, Y=ира Х=елена, Y=иван Х=николай, Y=ира Х=ольга, Y=алексей Х=марина, Y=саша Х=сергей, Y=иван 7 Solutions Пример 2 Имеются факты вида: родитель(имя, имя) и женщина(имя). а) составить правило мать и определить, кто мать Маши. б) составить правило бабушка и определить, кто бабушка Ирины. в) составить правило внучка и определить, сколько внучек у Ольги и как их зовут Решение: DOMAINS имя= symbol PREDICATES nondeterm родитель(имя, имя) женщина(имя) nondeterm мать(имя,имя) nondeterm бабушка(имя,имя) nondeterm внучка(имя,имя) CLAUSES родитель(марина,ирина). родитель(елена, анна). родитель(ольга,марина). родитель(ольга,татьяна). родитель(татьяна,катя). родитель(анна, маша). женщина(ольга). женщина(маша). женщина(ирина). женщина(елена). женщина(анна). женщина(марина). женщина(татьяна). женщина(катя). MaTb(X,Y): -родитель(ХД),женщина(Х). 6a6ymka(X,Z): -мать(ХД),родитель^^). внучка(Х,У): -бабушка^,Х),женщина(Х). А) GOAL мать(Кто,маша). Результат: Кто=анна 1 Solution Б) GOAL бабушка(Кто,ирина). Результат: Кто=ольга 1 Solution В) GOAL внучка(Кто, ольга). Результат: Кто=ирина Кто=катя 2 Solutions Замечание: ключевое слово nondeterm определяет недетерминированные предикаты, которые могут совершать откат назад и генерировать множественные решения. Таким образом, если задача предполагает возможность получения несколько решений, следует объявлять предикаты как недетерминированные. Пример 3 Записать по правилам Пролога следующие факты: Билл играет в теннис, баскетбол и футбол Майк играет в футбол и хоккей. Сформулировать запросы, выясняющие: а) кто играет в футбол б) во что играет Майк в) во что играют и Билл, и Майк Решение: DOMAINS имя, cnopT=symbol PREDICATES р1ау(имя,спорт) CLAUSES р1ау(билл,теннис). р1ау(билл,баскетбол). р1ау(билл,футбол). р1ау(майк,хоккей). р1ау(майк,футбол). GOAL play(Х,футбол). Результат: Х=билл Х=майк 2 Solutions Б) GOAL play(майк,Х). Результат: Х=хоккей Х=футбол 2 Solutions GOAL р1ау(майк,Х),р1ау(билл,Х). Результат: Х=футбол 1 Solution Создание проекта позволяет протестировать пример как автономную исполняемую программу. После запуска проекта на исполнение создается exe- файл, работа которого завершается после первого решения, удовлетворяющего решению задачи. Запуск программы в этом режиме не обеспечивает автоматический вывод значений переменных, поэтому необходимо использовать стандартный предикат вывода write. Пример 4. Заданы отношения-факты: родитель(“Иван”,”Катя”). родитель(“Анна”,” Олег ”). родитель(“Олег”,”Дима”). родитель(“Игорь”,”Ольга”). родитель(“Олег”,”Виктор”). родитель(“Игорь”,”Иван”). мужчина(“Дима”). мужчина(“Иван”). мужчина(“Игорь”). мужчина(“Олег”). мужчина(“Виктор”). женщина(“Катя”). женщина(“Ольга”). женщина(“Анна”). Составить новое отношение-правило |