Title: Logick
1Logické programování
- Tomáš Vanícek
- Stavební fakulta CVUT
- Thákurova 7, Praha Dejvice
- vanicek_at_fsv.cvut.cz
- http//kix.fsv.cvut.cz/vanicek
2Procedurální (klasické) programování
- Popisuje algoritmus postup, jak vyrešit úlohu
3Príklad programu v procedurálním programovacím
jazyce (Pascal)?
- Procedure kvadraticka_rovnice (a,b,cReal)
- Begin
- Dbb-4ac
- if Dlt0 then writeln ('neni reseni')
- if D0 then writeln ('jedno reseni',
-b/(2a)) - if Dgt0 then begin
- Dsqrt(D)
- R1(-bD)/(2a) R2(-b-D)/(2a)
- writeln ('Dve reseni', R1, R2)
- end
- end
Procedure kvadraticka_ Begin Dbb-4ac
if Dlt0 then writeln ('neni reseni') if
D0 then writeln ('jedno reseni', -b/(2a))
if Dgt0 then begin Dsqrt(D)
R1(-bD)/(2a) R2(-b-D)/(2a)
writeln ('Dve reseni', R1, R2) end end
4Neprocedurální (logické) programování
- Program je pouze popis situace, problému.
- Programátor nespecifikuje, jak problém rešit.
- To nechává na programu, respektive na prekladaci,
ci interpretu jazyka
5Neprocedurální programovací jazyky
6Príklad programu v Prologu
7Fakta
- 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).
8Fakta
- 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).
9Pravidla
- 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).
10Dotazy
- muz(tomas)?
- muz(anna)?
- otec(tomas,josef)?
- otec(X,josef)?
- dite(tomas,X)?
- dite(X,_)?
- otec(X,Y)?
- sestra(X,Y)?
- bratr(tomas,X)?
11Ú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)?