Основные элементы языка программирования Prolog

Автор: Пользователь скрыл имя, 06 Марта 2013 в 22:25, лабораторная работа

Описание работы

Цель работы: Изучение фундаментальных идей программирования языка Пролог.
Задание: Составить генеалогическое древо и базу знаний Prolog, которая описывает реальные отношения в вашей семье и позволяет осуществить эти отношения посредством использования правил. Составленное генеалогическое древо должно содержать минимум 3 уровня. Для реализации отношений в семье использовать не менее 6 правил.

Работа содержит 1 файл

Лабораторная работа №1(Prolog).docx

— 99.85 Кб (Скачать)

Министерство  Образования Республики Молдова

Технический Университет Молдовы

Факультет Вычислительной Техники, Информатики и Микроэлектроники

Кафедра Автоматики и Информационных Технологий

 

 

 

 

 

 

 

Лабораторная  работа №1

по дисциплине: «PLIA»

Тема: «Основные элементы языка программирования Prolog»

 

 

 

 

 

 

 

Выполнил:

студент группы TI – 093        Смагин Антон

 

 

Проверила:

старший преподаватель        Лазу Виктория

 

 

 

 

 

 

Кишинев 2012

Цель работы

Изучение фундаментальных  идей программирования языка Пролог.

Задание

Составить генеалогическое  древо и базу знаний Prolog, которая описывает реальные отношения в вашей семье и позволяет осуществить эти отношения посредством использования правил. Составленное генеалогическое древо должно содержать минимум 3 уровня. Для реализации отношений в семье использовать не менее 6 правил.

Генеалогическое древо

Генеалогическое древо, на основании  которого составлялась база знаний и  правило приведено на рисунке 1.

 

Рисунок 1 –  Генеалогическое древо

 

 

Реализация

Для определения родственных  связей были написаны факты вида parent(X, Y), которые определяют, что Y ребенок X. Также были написаны факты вида male(X) и female(X), которые помогают определить, является X мужчиной или женщиной.

На основании данных фактов были построены правила, помогающие определить родство членов семьи.

Вначале было написано правило  roditeli(X,Y,Z) которое содержит 3 переменные, где указано, что X и Y являются родителями Z. Оно является истинным, если есть такие факты, что X является родителем для Z, Y является родителем для Z, и X и Y – пара.

Правили mama(X,Y), papa(X,Y) основываются на фактах parent(X,Y), male(X), female(X).

Отношение roditeli(X,Y,Z) используется для правил sister(X,Y), brother(X,Y): для каждого X,Y X является братом(сестрой) для Y, если у них общие родители, и X является мужчиной(женщиной). Также необходимо добавить условие, X<>Y, так как один и тот же человек не может быть братом(сестрой) себе самому.

Для нахождения дяди и тёти я использовал отношения brother(X,Y) и sister(X,Y), а также факт parent(X,Y).

В представлении отношений  внук и внучка я воспользовался дополнительной переменной для указания родителя для  первой переменной.

Отношение двоюродного брата  на оформил в двух вариантах, так как родителем моего брата может быть как моя тётя, так и дядя.

Двоюродная сестра является обратным отношением к двоюродному  брату, и поэтому я определил  это отношение как: dvoiursestra(X,Y):-dvoiurbrat(Y,X). Также в обоих отношениях я задал пол объектам.

Конъюнкция в правилах означает, что все подцели должны быть истинными, чтобы цель(goal) была достигнута. Если в цели значится дизъюнкция, то для достижения главной цели необходимо выполнение любой из подцелей.

Конъюнкция определяется запятой, а дизъюнкция точкой с запятой.

В качестве предложений по улучшению кода можно указывать  родителем не 1 человека, а сразу  двух, в связи, с чем может быть уменьшено число правил.

 

 

 

 

 

 

 

 

 

 

 

Результаты работы программы

Результат поиска всех матерей  и прадедушек в моем генеалогическом  древе показан на рисунке 1.

 

Рисунок 1 –  Результат поиска матерей и прадедушек

 

 

 

 

 

 

 

Результат поиска кузенов и братьев для «irina» показан на рисунке 2.

 

Рисунок 2 –  Результат поиска кузенов и братьев

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

В ходе данной лабораторной работы были изучены основные элементы языка программирования Prolog. Из проделанной работы можно сделать вывод, что данный язык легок в изучении, обладает большими возможностями и может быть применен для решения разного рода задач(нечисловые решения). Для разработки и запуска программ я использовал среду TurboProlog, представляющую удобное средство программирования.

Приложение А

Листинг программы

child(serghey, elena).

child(serghey, iurii).

child(irina, elena).

child(irina, iurii).

child(oleg, evgenii).

child(oleg, natalia).

 

child(elena, galina).

child(elena, ilia).

child(natalia, galina).

child(natalia, ilia).

child(iurii, liudmila).

child(iurii, anatolii).

 

child(liudmila, vera).

child(liudmila, alexandr).

child(anatolii, stepan).

child(anatolii, tatiana).

 

man(alexandr).

man(stepan).

man(ilia).

man(anatolii).

man(evgenii).

man(iurii).

man(serghey).

man(oleg).

 

woman(irina).

woman(natalia).

woman(elena).

woman(liudmila).

woman(galina).

woman(vera).

woman(tatiana).

 

parent(X, Y) :- child(Y, X).

parents(X, Y, Z) :- parent(X, Z), parent(Y, Z), man(X), woman(Y).

 

brothersister(X, Y) :- parents(Z, W, X), parents(Z, W, Y), X \= Y, X@>Y.

brother(X, Y) :- brothersister(X, Y), man(X).

sister(X, Y) :- brothersister(X, Y), woman(X).

 

mother(X, Y) :- parent(X, Y), woman(X).

father(X, Y) :- parent(X, Y), man(X).

 

son(X, Y) :- child(X, Y), man(X).

doughter(X, Y) :- child(X, Y), woman(X).

 

grandparent(X, Y) :- child(Y, Z), child(Z, X).

grandmother(X, Y) :- grandparent(X, Y), woman(X).

grandfather(X, Y) :- grandparent(X, Y), man(X).

 

grandgrandparent(X, Y) :- grandparent(X, Z), parent(Z, Y).

grandgrandfather(X, Y) :- grandgrandparent(X, Y), man(X).

grandgrandmother(X, Y) :- grandgrandparent(X, Y), woman(X).

 

aunt(X, Y) :- parents(Z, W, Y), (sister(X, Z) ; sister(X, W)).

uncle(X, Y) :- parents(Z, W, Y), (brother(X, Z) ; brother(X, W)).

 

cousin(X, Y) :- parents(Zy, Wy, Y), parents(Zx, Wx, X), grandparent(G, Y), grandparent(G, X), Zy \= Zx, Wy \= Wx, X@>Y.


Информация о работе Основные элементы языка программирования Prolog