Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilMarcel Jelínek
1
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu
2
Příklad programu v procedurálním programovacím jazyce (Pascal) Procedure kvadraticka_rovnice (a,b,c:Real); Begin D:=b*b-4*a*c if D<0 then writeln ('neni reseni'); if D=0 then writeln ('jedno reseni:', -b/(2*a)); if D>0 then begin D:=sqrt(D); R1:=(-b+D)/(2*a); R2:=(-b-D)/(2*a); writeln ('Dve reseni:', R1, R2); end;
3
Neprocedurální (logické) programování „Program“ je pouze popis situace, problému. Programátor nespecifikuje, jak problém řešit. To nechává na programu, respektive na překladači, či interpretu jazyka
4
Neprocedurální programovací jazyky LISP AUTOLISP Prolog (SWI-Prolog)
5
Příklad programu v Prologu Fakta pravidla
6
Fakta muz(tomas). muz petr). muz(jan). muz(jiri). muz(josef). muz(lukas). muz(bartolomej). zena(lucie). zena(zdislava). zena(petra). zena(hana). zena(johana). zena(anna).
7
Fakta rodic(tomas,josef). rodic(tomas,anna). rodic(lucie,josef). rodic(lucie,anna). rodic(petr,johana). rodic(petr,bartolomej). rodic(zdislava,johana). rodic(zdislava,bartolomej). rodic(jan,lukas). rodic(petra,lukas). rodic(jiri,tomas). rodic(jiri,petr). rodic(jiri,jan). rodic(hana,tomas). rodic(hana,petr). rodic(hana,jan).
8
Pravidla otec(X,Y) :- rodic(X,Y), muz(X). matka(X,Y) :- rodic(X,Y), zena(X). dite(X,Y) :- rodic(Y,X). sourozenec(X,Y) :- rodic(Z,X), rodic (Z,Y). bratr(X,Y) :- sourozenec(X,Y), muz(X). sestra(X,Y) :- sourozenec(X,Y), zena(X). manzel(X,Y) :- dite(Z,X), dite(Z,Y), muz(X). manzelka(X,Y) :- dite(Z,X), dite(Z,Y),zena(X).
9
Dotazy muz(tomas) muz(anna) otec(tomas,josef) otec(X,josef) dite(tomas,X) dite(X,_) otec(X,Y) sestra(X,Y) bratr(tomas,X)
10
Úkoly Napiše tato pravidla: dedecek(X,Y) babicka(X,Y) stryc(X,Y) teta(X,Y) synovec(X,Y) neter(X,Y) bratranec(X,Y) sestrenice(X,Y)
11
Predikát řez (!) Vždy splněn Není povolen návrat přes něj
12
Použití řezu Problém s opakovaným výskytem sourozenců (kteří mají dva společné rodiče) sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y).
13
Predikát fail Nikdy není splněn Použití: technika „konstruktivního selhání“ vypismuze:-muz(X),write(X),nl,fail.
14
Technika cut and fail Způsob tvorby negace Zařídím, aby člověk nebyl sám sobě sourozencem. ruzny(X,Y):-X=Y,!,fail. ruzny(X,Y):-true. sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y),ruzny(X,Y). Některé implementace Prologu (i SWi Prolog) obsahují přímo logickou spojku not, tvorbu negace není třeba takto opisovat.
15
Aritmetika soucet (A,B,C) :- C is A+B. soucin (A,B,C) :- C is A*B. sude_cislo(X) :- soucin(2,Y,X). (nefunguje, nevi se, co to je Y) cislo(X):-X=0. cislo(Y):-cislo(X),Y is X+1.
16
Albegrogram Zaměňte písmena za čísla, aby platilo: A * B * C = 6 + - + D + E + F = 6 + + - G + H + I =6 =4 =4 =4 Použijte čísla <=3.
17
Albegrogram řešení cis(0). cis(1). cis(2). cis(3). ohodnot(A,B,C,D,E,F,G,H,I) :- cis(A), cis(B), cis(C), cis(D), cis(E), cis(F), cis(G), cis(H), cis(I), 6 is A * B * C, 4 is A + D + G, 6 is D + E + F, 6 is G + H + I, 4 is C+F-I, 4 is B-E+H. ?- ohodnot(A,B,C,D,E,F,G,H,I).
18
Práce se seznamy http://iris.uhk.cz/logpro/teorie/teorie6.html Další příklady http://iris.uhk.cz/logpro/
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.