close

Вход

Забыли?

вход по аккаунту

?

ЛП1

код для вставкиСкачать
Министерство Образования и Науки Украины
Севастопольский национальный технический университет
Кафедра КиВТ
Отчет по лабораторной работе №1
По дисциплине "Логическое программирование"
На тему:
"Основы программирования на языке Пролог"
Выполнил: ст.гр. М-43д
Ярославцев Д.А.
Вариант №21
Проверил: доцент
Брюховецкий А.А.
2011
Цель работы:
Изучить основы синтаксиса языка Пролог, выработать навыки работы с интерактивной системой Пролог, научиться оформлять отношения между данными на языке Пролог на примере родственных отношений между членами семьи.
Постановка задачи:
Изобразить граф родственных связей. Составить программу, которая описывает родственные отношения. В качестве фактов описать унарные отношения: мужчина, женщина; и бинарные: состоят в браке, родитель-ребенок. Записать правила, которые определяют следующие отношения: муж, жена, родитель, ребенок, сын, дочь, брат, сестра, дядя, тетя, бабушка, дедушка. Подобрать тестовые данные, проверяющие все полученные отношения. Тестовые данные должны содержать операции "И", "ИЛИ", "НЕ".
Выполнить задание по индивидуальному варианту, которое заключается в определении предиката "Тесть" ("отец жены").
Ход работы:
Придумаем имена членов семьи и занимаемое ими положение в семейном дереве. На рисунке 1 изображен граф родственных связей:
Рис. 1 - граф родственных связей.
Составим программу в программе Visual Prolog, которая бы описала связи, представленные на рисунке 1.
Текст программы:
%------- predicates ------%
%------- male ------%
male("ivan").
male("viktor").
male("anton").
male("vladimir").
male("valerii").
male("sergey").
male("vitalii").
male("andrey").
male("michail").
%------- female ------%
female("maria").
female("alena").
female("olga").
female("elena").
female("irina").
female("viktoria").
female("aveksandra").
female("anastasia").
female("kristina").
%-------- marriage ----%
marriage("ivan","maria").
marriage("viktor","alena").
marriage("vladimir","elena").
marriage("valerii","irina").
marriage("sergey","viktoria").
marriage("vitalii","aleksandra").
%------- parent ------%
parent("ivan","viktor").
parent("maria","viktor").
parent("ivan","olga").
parent("maria","olga").
parent("ivan","anton").
parent("maria","anton").
parent("ivan","elena").
parent("maria","elena").
parent("alena","irina").
parent("viktor","irina").
parent("alena","sergey").
parent("viktor","sergey").
parent("elena","vitalii").
parent("vladimir","vitalii").
parent("valerii","anastasia").
parent("irina","anastasia").
parent("sergey","andrey").
parent("viktoria","andrey").
parent("vitalii","kristina").
parent("aleksandra","kristina").
parent("vitalii","michail").
parent("aleksandra","michail").
%-------------------%
%---------- rules -------------%
husband(X,Y):-marriage(X,Y),male(X).
wife(Y,X):-marriage(X,Y),female(Y).
child(X,Y):-parent(Y,X).
sun(X,Y):-parent(Y,X),male(X).
daughter(X,Y):-parent(Y,X),female(X).
father(X,Y):-parent(X,Y),male(X).
mother(X,Y):-parent(X,Y),female(X).
sister(X,Y):-daughter(X,Z),child(Y,Z).
brother(X,Y):-sun(X,Z),child(Y,Z).
uncle(X,Y):-( brother(Z,X), child(Y,Z) ).
uncle(X,Y):-( sister(Z,X), child(Y,Z) ).
grandparent(X,Y):-parent(Z,Y),parent(X,Z). grandfather(X,Y):-grandparent(X,Y),male(X).
grandmother(X,Y):-grandparent(X,Y),female(X).
%------ Test` =) -------%
test(X,Y):-daughter(Z,X), wife(Z,Y).
%test(X,Y):-child(Z,Y), wife(Z,X).%
%----------------------------%
t1 :- husband("ivan","maria").
t2 :- husband("viktor","alena").
t3 :- husband("valerii","irina").
t4 :- wife("alena","viktor").
t5 :- wife("irina","valerii").
t6 :- wife("maria","ivan").
t7 :- sun("sergey","viktor").
t8 :- sun("vitalii","vladimir").
t9 :- sun("michail","vitalii").
t10 :- daughter("irina","alena").
t11 :- daughter("anastasia","irina").
t12 :- daughter("elena","maria").
t13 :- brother("viktor","anton").
t14 :- brother("anton","olga").
t15 :- brother("anton","vladimir"). %false%
t16 :- sister("alena","elena"). %false%
t17 :- sister("alena","olga"). %false%
t18 :- sister("olga","anton").
t19 :- uncle("anton","sergey").
t20 :- uncle("anton","valerii"). %false%
t21 :- uncle("anton","irina").
t22 :- aunt("olga","sergey").
t23 :- aunt("olga","vitalii").
t24 :- aunt("olga","irina").
t25 :- grandfather("ivan","sergey").
t26 :- grandfather("ivan","vitalii").
t27 :- grandfather("viktor","andrey").
t28 :- grandmother("alena","andrey").
t29 :- grandmother("alena","anastasia").
t30 :- grandmother("elena","kristina").
t31 :- father("ivan","olga").
t32 :- father("ivan","anton").
t31 :- test("viktor", "valerii").
goal :- test( E , "valerii" ), write("Test` = ", E), nl.
Результаты работы программы:
Для проверки заведомо правильного или неправильного утверждения были написаны утверждения и правила для всех семейных положений по три примера. Целью являлось нахождение троюродных братьев. Из рисунка 1 видно, что на тесты, подтверждающие родство по определенному признаку, программы ответила правильно.
Рисунок 1 - Диалоговое окно программы.
Решение главной задачи представлено на рисунке 2. Как видно, программа верно нашла решение, то есть единственного тестя:
Рисунок 2 - Фрагмент диалогового окна программы.
Результаты работы программного модуля совпали с ожидаемыми, что говорит о правильной работе программы.
Выводы:
В ходе выполнения работы были изучены основы синтаксиса языка Пролог, выработаны навыки работы с интерактивной системой Пролог. А также изучено оформление отношений между данными на языке Пролог на примере родственных отношений между членами семьи.
Документ
Категория
Рефераты
Просмотров
31
Размер файла
188 Кб
Теги
лп1
1/--страниц
Пожаловаться на содержимое документа