slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Програмиране на Пролог PowerPoint Presentation
Download Presentation
Програмиране на Пролог

Loading in 2 Seconds...

play fullscreen
1 / 68

Програмиране на Пролог - PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on

Програмиране на Пролог. доц. Светла Бойчева Факултет по математика и информатика СУ “Св. Климент Охридски”. Съдържание на курса. Теоретични основи на езика Пролог. Основни понятия от предикатното смятане от първи ред. Клаузна форма.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Програмиране на Пролог' - cwen


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Програмиране на Пролог

доц. Светла Бойчева

Факултет по математика и информатика

СУ “Св. Климент Охридски”

slide2
Съдържание на курса
  • Теоретични основи на езика Пролог. Основни понятия от предикатното смятане от първи ред. Клаузна форма.
  • Метод на резолюцията. Пример. Унифициращ алгоритъм. Пример. Преход към езика Пролог синтактични и семантични ограничения
  • Въведение в програмирането на езика Пролог. Факти. Въпроси. Променливи. Конюнкции. Правила. Механизъм за възврат. Рекурсия.Синтаксис и семантика на програмите
  • Синтаксис на езика Пролог. Информационни обекти. Символи. Термове (константи, променливи, структури). Съпоставяне на термове. Синтаксис на програма на Пролог
  • Запознаване със средата за програмиране SWI-Prolog
  • Семантика. Декларативна семантика. Процедурна семантика.
  • Списъци. Синтаксис. Семантика. Вътрешно представяне. Унификация
  • Основни операции над списъци: Проверка, дали елементът принадлежи на списък. Конкатенация на списъци предикат append и прилагането му за разбиване на списък на части; за търсене на шаблон в списък. Включване на елемент в списък. Изключване на елемент от списък. Проверка, дали списък е подсписък на даден списък
slide3
Съдържание на курса
  • Оператори. Дефиниране на оператори. Отношения между аритметични изрази. Събиране на полиноми
  • Вградени предикати без странични ефекти. Определяне на типа на терм. Управляващи предикати fail и !. Използване на !. Примери. Проблеми с !. Управляващи предикати true и repeat
  • Предикати за работа с БД (assert, retract, asserta, assertz). Примери
  • Вход и Изход. Работа с файлове
  • Вградени предикати за работа с термове. Създаване и декомпозиция на атоми. Вграден предикат name. Създаване и декомпозиране на термове (=.., functor, arg).
  • Стил на програмиране
  • Практика на програмирането на Пролог. Операции над структури от данни. Двоично дърво. Представяне. Основни операции: принадлежност на елемент в двоично дърво. Двоично наредено дърво. Принадлежност на елемент в двоично наредено дърво. Включване и изключване на елемент от двоично дърво
  • Графи. Логическо описание. Представяне. Търсене на ацикличен път в граф. Търсене на Хамилтонови цикли в граф. Търсене на пътища с определена стойност. Минимални и максимални пътища в граф
slide6
Аритметични изрази

Аритметични операции

+ - събиране

- - изваждане

* - умножение

/ - деление

// - целочислено деление

mod – остатък при целочислено деление

** - повдигане на степен

( )

Функции

abs(X) , sin(X), cos(X), sqrt(X), ...

slide7
Пресмятане на аритметични изрази

?- X is 5+sqrt(2).

?- Y=5, X is Y+1.

?- 5+6 =:= 3+8.

?- 5+6 =\= 4+6.

slide8
Задача
  • Дефинирайте предикат за пресмятане по зададено X на стойността на функцията:
slide9
% I начин

g(X,Result):-

0.5 < X , X =< 5,

Result is log(X+3).

g(X,Result):-

-0.5 =< X, X =< 0.5,

Result = -3.

g(X,Result):- (X < -0.5 ; X >5),

Result is sqrt(abs(12-X))+X*X.

% X**Y - X на степен Y

% X**2 - X*X – sqr(X) – X на квадрат

slide10
% II начин

g(X,Result):-

0.5 < X , X =< 5, !,

Result is ln(X+3).

g(X,Result):-

-0.5 =< X, X =< 0.5, !,

Result = -3.

g(X,Result):-

Result is sqrt(abs(12-X))+X*X.

% X**Y - X на степен Y

% X**2 - X*X – sqr(X) – X на квадрат

slide11
Задача
  • Дефинирайте предикат за пресмятане по зададено X на стойността на функцията:
slide14
fact(0,1).

fact(N,Result):-

M is N – 1,

fact(M,R),

Result is N*R.

slide20

% I начин

fib(0,1).

fib(1,1).

fib(N,X):-

N > 1,

Prev is N - 1,

PrevPrev is N - 2,

fib(Prev, Y),

fib(PrevPrev, Z),

X is Y + Z.

slide26
pow(_,0,1).

pow(X,N,Result):-

N < 0,

N1 is abs(N),

pow(X,N1,R),

Result is 1/R.

pow(X,N,Result):-

N > 0,

N1 is N - 1,

pow(X,N1,R),

Result is X*R.

slide27
term(N,An):-

fact(N,R),

pow(5,N,T),

An is R/T.

zad7(X,Nin, An, Nin):-

term(Nin,An),An > X, !.

zad7(X,Nin, An, Nout):-

Next is Nin + 1,

zad7(X,Next, An, Nout).

slide30
Списъци
  • [] – празен списък
  • [X|L] – списък
  • [ 1, 2, 3, 4, 5]

опашка

глава

slide32
Примери
  • [1, 2 ,3 ] = [1|[2,3]] =[1|[2|[3]]]
  • [1]=[1|[ ]]
  • [1,2]= [1|[2]]
slide36
Проверка за приндалежност на даден елемент на списък

% вграден

member(X,[X|_]).

member(X,[_|L]):- member(X,L).

slide37

| ?- member(1,[1,2,3]).

yes

| ?- member(1,[4,1,2]).

yes

| ?- member(X,[1,2,3]).

X = 1 ? ;

X = 2 ? ;

X = 3 ? ;

no

slide38

[a1, a2, a3, …, an]

[b1, b2, b3, …, bm]

[X | L1 ]

L2

[a1, a2, a3, …, an, b1, b2, b3, …, bm]

[X | [ a2, a3, …, an, b1, b2, b3, …, bm] ]

L1

L2

slide39
Слепване на списъци

% вграден

append([],L2,L2).

append([X|L1],L2,[X|L3]):-append(L1,L2,L3).

slide40
| ?- append([1,2],[3,4],X).

X = [1,2,3,4] ? ;

no

| ?- append(X,[2,3],[1,2,3]).

X = [1] ? ;

no

| ?- append([1,2],X,[1,2,3]).

X = [3] ? ;

no

slide41
| ?- append(X,Y,[1,2,3]).

X = [],

Y = [1,2,3] ? ;

X = [1],

Y = [2,3] ? ;

X = [1,2],

Y = [3] ? ;

X = [1,2,3],

Y = [] ? ;

no

append
Дефиниции чрез append

member(X,L):-

append(_,[X|_],L).

L1

[X | L2 ]

L

append1
Дефиниции чрез append

del(X,L,Res):-

append(L1,[X|L2],L),

append(L1,L2,Res).

L1

[X | L2 ]

L

L1

L2

Res

slide44
Изтриване на първото срещане на елемент в списък

del(X,[X|L],L).

del(X,[Y|L],[Y|Res]):-

del(X,L,Res).

slide45
Изтриване на всички срещания на елемент в списък

del_all(X,[],[]).

del_all(X,[X|L],Res):-

del_all(X,L,Res).

del_all(X,[Y|L],[Y|Res]):-

del_all(X,L,Res).

slide46
| ?- del(1,[1,2,3],L).

L = [2,3] ? ;

no

| ?- del(1,[1,2,1,3],L).

L = [2,1,3] ? ;

L = [1,2,3] ? ;

no

| ?- del_all(1,[1,2,1,3],L).

L = [2,3] ? ;

L = [2,1,3] ? ;

L = [1,2,3] ? ;

L = [1,2,1,3] ? ;

no

slide47
Изтриване на всички срещания на елемент в списък

del_all(X,[],[]).

del_all(X,[X|L],Res):-

del_all(X,L,Res).

del_all(X,[Y|L],[Y|Res]):-

X \=Y, del_all(X,L,Res).

slide49
Дължина на списък

% вграден

length([ ], 0).

length([X|L],N):-

length(L,M),

N is M+1.

slide50
Отсичане

p:- a,b.

p:-c.

p  (a&b)  c

p:- a,!,b.

p:-c.

p  (a&b)  (~a&c)

p:-a,b.

p:- not a,c. (p:- \+ a, c)

slide51
Отсичане

p:- a,b,!,c,d.

p:- e.

p

a

e

b

!

c

d

slide52
Пример

max(X,Y,X):- X > Y.

max(X,Y,Y):- Y >= X.

max(X,Y,X):- X>Y,!.

max(X,Y,Y).

slide53
Пресмятане на сумата от елементите на списък от числа

sum([X],X).

sum([X|L],N):-

sum(L,M),

N is M+X.

?- sum([1,2,3],T).

T=6

slide54
nth([X|_],1,X).

nth([_|L],N,X):-

M is N-1,

nth(L,M,X).

last([X],X).

last([_|L],X):-

last(L,X).

count([ ],_,0).

count([X|L],X,N):-

count(L,X,K),

N is K+1.

count([Y|L],X,N):-

Y \= X,

count(L,X,N).

slide63
init(_,[ ]).

init([X|Rest],[X|L]):-

init(Rest,L).

sublist(L,T):-

init(L,T).

sublist([_|Rest],T):-

sublist(Rest,T).

slide64
equal([ ],[ ]).

equal([X|Rest1], S2):-

del(X,S2,Rest2), !,

equal(Rest1,Rest2).