900 likes | 1.02k Views
Програмиране на Пролог. доц. Светла Бойчева Факултет по математика и информатика СУ “Св. Климент Охридски”. Съдържание на курса. Теоретични основи на езика Пролог. Основни понятия от предикатното смятане от първи ред. Клаузна форма.
E N D
Програмиране на Пролог доц. Светла Бойчева Факултет по математика и информатика СУ “Св. Климент Охридски”
Съдържание на курса • Теоретични основи на езика Пролог. Основни понятия от предикатното смятане от първи ред. Клаузна форма. • Метод на резолюцията. Пример. Унифициращ алгоритъм. Пример. Преход към езика Пролог синтактични и семантични ограничения • Въведение в програмирането на езика Пролог. Факти. Въпроси. Променливи. Конюнкции. Правила. Механизъм за възврат. Рекурсия.Синтаксис и семантика на програмите • Синтаксис на езика Пролог. Информационни обекти. Символи. Термове (константи, променливи, структури). Съпоставяне на термове. Синтаксис на програма на Пролог • Запознаване със средата за програмиране SWI-Prolog • Семантика. Декларативна семантика. Процедурна семантика. • Списъци. Синтаксис. Семантика. Вътрешно представяне. Унификация • Основни операции над списъци: Проверка, дали елементът принадлежи на списък. Конкатенация на списъци предикат append и прилагането му за разбиване на списък на части; за търсене на шаблон в списък. Включване на елемент в списък. Изключване на елемент от списък. Проверка, дали списък е подсписък на даден списък
Съдържание на курса • Оператори. Дефиниране на оператори. Отношения между аритметични изрази. Събиране на полиноми • Вградени предикати без странични ефекти. Определяне на типа на терм. Управляващи предикати fail и !. Използване на !. Примери. Проблеми с !. Управляващи предикати true и repeat • Предикати за работа с БД (assert, retract, asserta, assertz). Примери • Вход и Изход. Работа с файлове • Вградени предикати за работа с термове. Създаване и декомпозиция на атоми. Вграден предикат name. Създаване и декомпозиране на термове (=.., functor, arg). • Стил на програмиране • Практика на програмирането на Пролог. Операции над структури от данни. Двоично дърво. Представяне. Основни операции: принадлежност на елемент в двоично дърво. Двоично наредено дърво. Принадлежност на елемент в двоично наредено дърво. Включване и изключване на елемент от двоично дърво • Графи. Логическо описание. Представяне. Търсене на ацикличен път в граф. Търсене на Хамилтонови цикли в граф. Търсене на пътища с определена стойност. Минимални и максимални пътища в граф
Пролог • Основни стилове за програмиране • Императивен (процедурен) • програма = алгоритъм + структури от данни • Дескриптивни (декларативен) • програма = факти + правила • изпълнение = доказателство (извод) • Езици за логическо програмиране
Литература • М. Тодорова, Езици за функционално и логическо програмиране, Втора част, Логическо програмиране, Ciela, 2003 • Ivan Bratko, Prolog Programming for Artificial Intelligence, third edition, Addison-Wesley,2001 • Дочев Д., Х. Дичев, З. Марков, Г. Агре, Програмиране на Пролог. Основи и приложения, С., Наука и изкуство, 1989. • Richard A. O’Keefe, The Craft of Prolog, The MIT Press, 1990 • Leon Sterling, The Practice of Prolog, The MIT Press, 1990 • Leon Sterling and Ehud Shapiro, The Art of Prolog, The MIT Press, 1986
Теоретични основи на езика Пролог част 1
Теоретични основи на езика Пролог • Основни понятия от предикатното смятане от първи ред. • Клаузна форма. • Метод на резолюцията. Пример.
Преход към езика Пролог част 2
Преход към езика Пролог • Унифициращ алгоритъм. Пример. • Преход към езика Пролог синтактични и семантични ограничения
Z=s(b,a) Примери
Въведение в програмирането на езика Пролог част 3
Въведение в програмирането на Пролог • Факти • Въпроси • Променливи • Конюнкции • Правила • Механизъм за възврат • Рекурсия • Синтаксис и семантика на програмите
Клаузи • Факти • Правила • Цели
Символни константи • последователност от символи, която започва с малка буква “a..z” и може да съдържа малки букви “a..z”, главни букви “A..Z”, цифри “0..9” и символа долна черта “_” • Примери: • my_function, a12, b, x_y, f_15, delete
Променливи • Последователност от символи, която започва с главна буква “A..Z” и може да съдържа малки букви “a..z”, главни букви “A..Z”, цифри “0..9” и символа долна черта “_” - наричат се именувани променливи • Символът долна черта “_” – нарича се още анонимна променлива • Примери: • X, Y, A12, My_variable, XY_8 • _
Tom Pam Bob Liz Ann Pat Jim
Дефиниране на релации чрез Факти parent(tom,bob). parent(tom,liz). parent(pam,bob). parent(bob,ann). parent(bob,pat). parent(pat,jim).
Задаване на въпроси Цели | ?- parent(tom,bob). yes | ?- parent(bob,tom). no | ?- parent(tom,sam). no
Задаване на въпроси Цели | ?- parent(tom,X). X = bob ? yes | ?- parent(tom,X). X = bob ? ; X = liz ? ; no | ?- parent(X,bob). X = tom ? ; X = pam ? ; no преудовлетворяване на целта
Задаване на въпроси Цели | ?- parent(X,Y). X = tom, Y = bob ? ; X = tom, Y = liz ? ; X = pam, Y = bob ? ; X = bob, Y = ann ? ; X = bob, Y = pat ? ; X = pat, Y = jim ? ; no
Задаване на въпроси Цели | ?- parent(X,Y), parent(Z,Y). X = tom, Y = bob, Z = tom? yes | ?- parent(X,Y), parent(Z,Y), X \= Z. X = tom, Y = bob, Z = pam ? ; X = pam, Y = bob, Z = tom ? ; no
Дефиниране на релации чрез Правила father(X,Y):-male(X) , parent(X,Y). mother(X,Y):- female(X), parent(X,Y). male(tom). male(bob). male(jim). female(pam). female(liz). female(ann). female(pat). тяло глава то / then ако / if и / and / конюнкция
| ?- father(tom,X). X = bob ? ; X = liz ? ; no | ?- father(pam,X). no
Правила brother(X,Y):- male(X), parent(Z,X), parent(Z,Y), X \= Y. sister(X,Y):- female(X), parent(Z,X), parent(Z,Y), X \= Y.
Правила uncle(X,Y):- male(X), parent(Z,Y), brother(X,Z). aunt(X,Y):- female(X), parent(Z,Y), sister(X,Z).
grandparent(X,Y):- parent(X,Z), parent(Z,Y).
Рекурсия • Гранично условие (stop) • Рекурсивно правило
offspring(X,Y):- parent(X,Y). offspring(X,Y):- parent(X,Z), offspring(Z,Y).
offspring(X,Y):- parent(X,Z), offspring(Z,Y). offspring(X,Y):- parent(X,Y).
offspring(X,Y):- parent(X,Y). offspring(X,Y):- offspring(X,Z),parent(Z,Y).
offspring(X,Y):- offspring(X,Z),parent(Z,Y). offspring(X,Y):- parent(X,Y).
Prolog • SWI-Prolog • www.swi-prolog.org • Arity Prolog • http://www.arity.com/Prolog/ • SICSTUS Prolog • http://www.sics.se/isl/sicstuswww/site/index.html • LPA Prolog • http://www.lpa.co.uk/win.htm
?-consult(‘/home/defaultobs/test.pl’). ?-consult(‘c:/temp/test.pl’).
Факти str_kont('Egypt' 'Africa'). str_kont('Russia','Europe'). str_kont('Russia','Asia'). str_kont('France','Europe'). str_kont('Japan','Asia'). str_kont('MagicLand','Europe'). stolica_str('Talin', 'Estonia'). stolica_str('Moscow', 'Russia'). stolica_str('Paris','France'). stolica_str('Tokyo', 'Japan'). stolica_str('Abra Kadabra', 'MagicLand').