This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
courses:knowledge_base_and_expert_system:lab2 [2019/08/30 19:46] andrey.suchkov [Порядок выполнения работы] |
courses:knowledge_base_and_expert_system:lab2 [2019/10/03 18:26] andrey.suchkov [Порядок выполнения работы] |
||
---|---|---|---|
Line 5: | Line 5: | ||
Пролог (англ. Prolog) -- язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. | Пролог (англ. Prolog) -- язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. | ||
- | Prolog является декларативным языком программирования: логика программы выражается в терминах отношений, представленных в виде фактов и правил. Для того чтобы инициировать вычисления, выполняется специальный запрос к базе знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода. | + | Prolog является декларативным языком программирования: логика программы выражается в терминах отношений, представленных в виде фактов и правил. Для того чтобы инициировать вычисления, выполняется специальный запрос к базе знаний, на которые система логического программирования генерирует ответы <<истина>> и <<ложь>>. Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода. |
- | Иначе говоря, предикат можно определить как функцию, отображающую множество произвольной природы в множество булевых значений {ложно, истинно}. Задача пролог–программы заключается в том, чтобы доказать, является ли заданное целевое утверждение следствием из имеющихся фактов и правил. | + | Иначе говоря, предикат можно определить как функцию, отображающую множество произвольной природы в множество булевых значений {ложно, истинно}. Задача пролог-программы заключается в том, чтобы доказать, является ли заданное целевое утверждение следствием из имеющихся фактов и правил. |
Язык программирования, реализованный в Visual (а ранее в Turbo) Prolog'е отличается от классического пролога тем, что он основан на строгой статической типизации. В него также добавлены средства объектно-ориентированного программирования, анонимные предикаты (лямбда-предикаты), факты-переменные и разрушающее присваивание для них, аргументы-домены (''Generic Interfaces and Classes'') и параметрический полиморфизм, мониторы (''Monitors with guards''), императивные конструкции (''foreach'', ''if<nowiki>...</nowiki>then<nowiki>...</nowiki>else''), коллекторы списков (''[<nowiki>...</nowiki>||<nowiki>...</nowiki>]'') и пр. | Язык программирования, реализованный в Visual (а ранее в Turbo) Prolog'е отличается от классического пролога тем, что он основан на строгой статической типизации. В него также добавлены средства объектно-ориентированного программирования, анонимные предикаты (лямбда-предикаты), факты-переменные и разрушающее присваивание для них, аргументы-домены (''Generic Interfaces and Classes'') и параметрический полиморфизм, мониторы (''Monitors with guards''), императивные конструкции (''foreach'', ''if<nowiki>...</nowiki>then<nowiki>...</nowiki>else''), коллекторы списков (''[<nowiki>...</nowiki>||<nowiki>...</nowiki>]'') и пр. | ||
Line 23: | Line 23: | ||
parent(name, name) | parent(name, name) | ||
clauses | clauses | ||
- | dog(X) :- parent(X,Y), dog(Y). | + | dog(X) :- parent(X, Y), dog(Y). |
dog("Rex"). | dog("Rex"). | ||
- | parent("Jack","Rex"). | + | parent("Jack", "Rex"). |
goal | goal | ||
dog(Who). | dog(Who). | ||
Line 36: | Line 36: | ||
- В среде отладчика включите окна просмотра переменных (**Local Variables**) и стека вызовов (**Call Stack**). Произведите пошаговую прокрутку программы, нажимая на кнопку **Trace Into** на панели инструментов. | - В среде отладчика включите окна просмотра переменных (**Local Variables**) и стека вызовов (**Call Stack**). Произведите пошаговую прокрутку программы, нажимая на кнопку **Trace Into** на панели инструментов. | ||
- Запишите и проанализируйте трассу выполнения программы по содержимому окон **Call Stack** и **Variables For Current Clause** для одного решения. | - Запишите и проанализируйте трассу выполнения программы по содержимому окон **Call Stack** и **Variables For Current Clause** для одного решения. | ||
- | - Напишите на языке Visual Prolog программу //DOG1//, описывающую родственные связи собак в соответствии с вариантом задания. Программа должна использовать предикаты //dog// и //parent// из программы //DOG.PRO// и содержать не менее двух правил. | + | - Напишите на языке Visual Prolog программу //DOG1//, описывающую родственные связи собак в соответствии с вариантом задания. Программа должна использовать предикаты ''dog'' и ''parent'' из программы //DOG.PRO// и содержать не менее двух правил. |
- Произведите отладку программы в системе Visual Prolog на следующих запросах: | - Произведите отладку программы в системе Visual Prolog на следующих запросах: | ||
- Кто является собакой? | - Кто является собакой? | ||
Line 45: | Line 45: | ||
- Кому Balto является родителем? | - Кому Balto является родителем? | ||
- Постройте трассу выполнения программы для каждого запроса. | - Постройте трассу выполнения программы для каждого запроса. | ||
- | - **//Задание для самостоятельной работы.//** Используя предикаты ''parent(symbol,symbol)'', ''man(symbol)'', ''woman(symbol)'', ''married(symbol,symbol)'', записать факты, описывающие Вашу семью. \\ Написать на языке Visual Prolog программу //FAMILY//, содержащую 8 правил вывода для любых родственных отношений в Вашей семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.). \\ Отладить программу на 5-6 различных запросах. | + | - **//Задание для самостоятельной работы.//** Используя предикаты ''parent(symbol, symbol)'', ''man(symbol)'', ''woman(symbol)'', ''married(symbol, symbol)'', записать факты, описывающие Вашу семью. \\ Написать на языке Visual Prolog программу //FAMILY//, содержащую не менее 8 правил вывода для любых родственных отношений в Вашей семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.). \\ Отладить программу на 5-6 различных запросах. |
===== Варианты заданий ===== | ===== Варианты заданий ===== | ||
[[.lab2:lab2_vars]] | [[.lab2:lab2_vars]] |