Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu
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;
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
Neprocedurální programovací jazyky LISP AUTOLISP Prolog (SWI-Prolog)
Příklad programu v Prologu Fakta pravidla
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).
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).
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).
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)
Ú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)