Логическое программирование. Отчет к лабораторным работам 11, 12, 13 По курсу Функциональное и логическое программирование
![]()
|
ФАКУЛЬТЕТ «Информатика и системы управления» КАФЕДРА «Программное обеспечение ЭВМ и информационные технологии» ОТЧЕТ к лабораторным работам №11, 12, 13 По курсу: «Функциональное и логическое программирование» Студент ИУ7-65Б Абрамов В.А. Преподаватель Толпинская Н.Б Москва, 2021г. 11: Задание №1 Настроить утилиту TestGoal ![]() Рис.1 – создание нового проекта ![]() Рис. 2 – настройка проекта ![]() Рис. 3 – запуск тестовой программы Задание№2: разработать свою программу - «Телефонный справочник» domains phone, name = symbol. predicates phone_book(phone, name). clauses phone_book("+10000", "Moscow"). phone_book("+10000", "NotMoscow"). phone_book("+01000", "SPB"). phone_book("+00100", "Sevastopol"). phone_book("+00010", "Ufa"). phone_book("+00001", "Simferopol"). goal phone_book("+10000", Name). Результат работы программы: ![]() Вопросы: Что собой представляет программа на Prolog? Программа на Prolog представляет собой набор фактов и правил, которые формируют базу знаний о предметной области. Факты представляют собой составные термы, с помощью которых фиксируется наличие истинностных отношений между объектами предметной области — аргументами терма. Правила являются обобщенной формулировкой условия истинности знания – отношения между объектами предметной области (аргументами терма), которое записано в заголовке правила. Условие истинности этого отношения является телом правила. Какова структура программы на Prolog? Программа на Prolog состоит из разделов. Каждый раздел начинается со своего заголовка. Структура программы: директивы компилятора — зарезервированные символьные константы CONSTANTS — раздел описания констант DOMAINS — раздел описания доменов DATABASE — раздел описания предикатов внутренней базы данных PREDICATES — раздел описания предикатов CLAUSES — раздел описания предложений базы знаний GOAL — раздел описания внутренней цели (вопроса). В программе не обязательно должны быть все разделы. Как реализуется программа на Prolog? Описывается база знаний, задается вопрос. Как формируются результаты работы программы? В процессе выполнения программы — система пытается найти, используя базу знаний, такие значения переменных, при которых на поставленный вопрос можно дать ответ «Да». 12: Цель работы – познакомиться со структурой, принципами оформления и логикой выполнения программы на Prolog. Задачи работы: приобрести навыки декларативного описания предметной области с использованием фактов и правил. Изучить способы использования фактов и правил в программе на Prolog, принципы и правила сопоставления и отождествления, принцип унификации. Задание: Составить программу – базу знаний, с помощью которой можно определить, например, множество студентов, обучающихся в одном ВУЗе. Студент может одновременно обучаться в нескольких ВУЗах. Привести примеры возможных вариантов вопросов и варианты ответов (не менее 3-х). Описать порядок формирования вариантов ответа. Листинг: domains id = integer. fname, lname = symbol. uni = symbol. predicates student(id, fname, lname). study(id, uni). students_from_uni(fname, lname, uni). clauses student(1, "Abc", "123"). student(2, "Bca", "231"). student(3, "Cab", "312"). study(1, bmstu). study(1, msu). study(2, mfti). study(3, bmstu). students_from_uni(Fname, Lname, Uni) :- study(Id, Uni), student(Id, Fname, Lname). goal % 1.Find all universities of student by id %study(1, Uni). % 1.1 %study(2, Uni). % 1.2 %study(4, Uni). % 1.3 % 2. Find all students(id) from one uni %study(Id, bmstu). % 2.1 %study(Id, msu). % 2.2 %study(Id, no_uni). %2.3 % 3. Find all students(name), from one uni %students_from_uni(Fname, Lname, bmstu). % 2.1 %students_from_uni(Fname, Lname, msu). % 2.2 %students_from_uni(Fname, Lname, no_uni). % 2.3 Результаты работы программы: 1. По id студента найти все университеты, в которых он обучается: ![]() ![]() ![]() Рис. 1-3 – результаты работы 1.1, 1.2, 1.3 Система пытается найти, используя базу знаний, такие значения Uni, при которых на поставленный вопрос «в составном терме study: id == значение?» можно дать ответ «Да». 2. Найти всех студентов (id) одного вуза: ![]() ![]() ![]() Рис. 4-6 – результаты работы 2.1, 2.2, 2.3 Система пытается найти, используя базу знаний, такие значения Id, при которых на поставленный вопрос «в составном терме study: uni == значение?» можно дать ответ «Да». 3. Найти всех студентов (имя, фамилия) одного вуза: ![]() ![]() ![]() Рис. 7-9 – результаты работы 3.1, 3.2, 3.3 Система пытается найти, используя базу знаний, такие значения Fname, Lname, при которых на поставленный вопрос «student Id == значение Id из study, где Uni == значение?» можно дать ответ «Да». Вопросы: Что собой представляет программа на Prolog? Программа на Prolog представляет собой набор фактов и правил, которые формируют базу знаний о предметной области, вопроса. Факты представляют собой составные термы, с помощью которых фиксируется наличие истинностных отношений между объектами предметной области — аргументами терма. Правила являются обобщенной формулировкой условия истинности знания – отношения между объектами предметной области (аргументами терма), которое записано в заголовке правила. Условие истинности этого отношения является телом правила. Какова структура программы на Prolog? Программа на Prolog состоит из разделов. Каждый раздел начинается со своего заголовка. Структура программы: директивы компилятора — зарезервированные символьные константы CONSTANTS — раздел описания констант DOMAINS — раздел описания доменов DATABASE — раздел описания предикатов внутренней базы данных PREDICATES — раздел описания предикатов CLAUSES — раздел описания предложений базы знаний GOAL — раздел описания внутренней цели (вопроса). В программе не обязательно должны быть все разделы. Как реализуется программа на Prolog? Описывается база знаний, задается вопрос. Как формируются результаты работы программы? В процессе выполнения программы — система пытается найти, используя базу знаний, такие значения переменных, при которых на поставленный вопрос можно дать ответ «Да». |