Логическое программирование на примере языка Prolog
Министерство
образования и науки Российской Федерации
Федеральное
государственное бюджетное образовательное учреждение высшего профессионального
образования
«ТОМСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра
комплексной информационной безопасности электронно-вычислительных систем
(КИБЭВС)
Практическая
работа №7
ЯЗЫКИ
ПРОГРАММИРОВАНИЯ
Выполнил:
Студент гр. 714
Ганиев И Н.
Принял:
доцент, к.н.
А.С. Романов
Томск,
2015
1. Введение
Знакомство с основами логического
программирования на примере языка Prolog.
2. Задание
Изучить теоретический материал
о языках логического программирования.
Изучить синтаксис основных
команд языка Prolog.
Задать генеалогическое дерево
вида: я, брат, сестра, отец, мать, бабушка(мать мамы), дедушка (отец мамы),
бабушка (мать отца), дедушка (отец отца), жена брата, племянник (сын брата или
сестры), племянница (дочь брата или сестры), дядя (со стороны отца), тетя (со
стороны отца), дядя (со стороны матери), дядя (со стороны матери), дочь дяди со
стороны матери, дочь дяди со стороны отца, прадед (отец деда со стороны
матери), прабабушка (мать деда со стороны матери), прадед (отец бабушки со
стороны матери), прабабушка (мать бабушки со стороны матери).
Нарисовать полученное дерево.
Привести определение
предикатов: родитель, потомок, предок, дядя (тетя), племянник, племянница, дед,
родной(ая) брат(сестра), двоюродный(ая) брат(сестра), супруг.
3. Теоретический
материал
Хорновская
логическая программа состоит из набора хорновских фраз, которые в языке
Пролог называются фактами и правилами.
Фактом
называется формула вида
Правилом
называется формула вида
Запросом
к логической программе называется формула вида
Основные синтаксические
объекты: атомы, константы и переменные. Константы состоят из атомов и чисел.
Числа - целые и вещественные. Атомы - обозначения для других постоянных
объектов предметной области. Атомы могут изображаться тремя различными
способами:
Последовательностью латинских
букв, цифр, начинающейся со строчной буквы;
Последовательностью, состоящей
из специальных символов <…>|==>|…|&;
Рисунок 1. Генеалогическое
дерево
логический
программирование синтаксис предикат
- Любыми последовательностями
символов, заключенными в апострофы (в т.ч. и русскими буквами).
Переменные обозначаются любыми последовательностями
латинских букв или цифр, начинающимися с большой буквы или символа
подчеркивания.
4. Ход работы
Генеалогическое дерево:
:- discontiguous мать/2.
мужчина(мухаммед).
мужчина(нодиршо).
мужчина(комилджон).
мужчина(рабони).
мужчина(асатулло).
мужчина(гани).
мужчина(назриддин).
мужчина(нурулло).
мужчина(илхомиддин).
мужчина(кудрат).
мужчина(рухулло).
/**Древо*/
мать(сумая,гани).
отец(мухаммед,гани).
мать(кимиё,сурайё).
отец(нодиршо, сурайё).
мать(иффет,асатулло).
отец(комилджон,астулло).
мать(салима1,озода).
отец(рабони,озода).
мать(салима,анора).
отец(назриддин,илхомиддин).
отец(назриддин,анора).
мать(озода,салима).
мать(озода,кудрат).
отец(асатулло, салима).
отец(асатулло, кудрат).
мать(хадиса,рухулло).
отец(нурулло,рухулло).
мать(салима,илхомиддин).
мать(салима,анора).
отец(назриддин,илхомиддин).
отец(назриддин,анора).
родитель(Z,C):-мать(Z,C);отец(Z,C).
потомок(X,Y):-(отец(Y,X);мать(Y,X)).
потомок(X,Y):-(отец(Z,X);мать(Z,X)),потомок(Z,Y).
предок(X,Y):-(отец(X,Y);мать(X,Y)).
предок(X,Y):-(отец(X,Z);мать(X,Z)),предок(Z,Y).
дядя(Z,C):-((отец(Y,Z),отец(Y,X),отец(X,C),Z\=X);(отец(Y,Z),отец(Y,X),мать(X,C),Z\=X)),мужчина(Z).
тетя(Z,C):-((отец(Y,Z),отец(Y,X),отец(X,C),Z\=X);(отец(Y,Z),отец(Y,X),мать(X,C),Z\=X)),not(мужчина(Z)).
племянница(C,Z):-((отец(Y,Z),отец(Y,X),отец(X,C),Z\=X);(отец(Y,Z),отец(Y,X),мать(X,C),Z\=X)),not(мужчина(C)).
дед(C,Z):-отец(C,Y),(отец(Y,Z);мать(Y,Z)).
родн_сестра(C,Z):-((отец(X,C),отец(X,Z)),(мать(Y,C),мать(Y,Z))),C\=Z,Z\=C,мужчина(C).
родн_сестра(C,Z):-((отец(X,C),отец(X,Z)),(мать(Y,C),мать(Y,Z))),C\=Z,Z\=C,not(мужчина(C)).
дв_брат(K,C):-((отец(Y,Z),отец(Y,X),(отец(X,K);мать(X,K)),(отец(Z,C);мать(Z,C)),Z\=X)),мужчина(K).
дв_сестра(K,C):-((отец(Y,Z),отец(Y,X),(отец(X,K);мать(X,K)),(отец(Z,C);мать(Z,C)),Z\=X)),not(мужчина(K)).
супруг(Z,C):-отец(C,K),мать(Z,K).
Тестируем программу
Заключение
Были изучены основы логического
программирования на языке Prolog.