1 / 10

Prolog

Prolog. Příklady Marek Menšík. P říklad 1.

natala
Download Presentation

Prolog

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prolog Příklady Marek Menšík

  2. Příklad 1 Dva kamarádi se rozhodli, že půjdou navštívit svou spolužačku, která bydlí na opačné straně města. Jelikož je město rozlehlé a cesta tramvají trvá přes hodinu, protože objíždí celé město, tak si řekli, že půjdou pěšky přes místí kanalizační síť, neboť kamarádka na ně bude čekat jen 30 minut. Kanalizační síť je rozlehlá a proto si vzali mapu. Netušili však, že se prováděly opravy a tudíž některé cesty byly zablokovány (nevěděli které – to víme jen my). Vaším úkolem je těmto kamarádům pomoct. Aby to neměli tak lehké, tak jim můžete pouze odpovědět ano v případě, že se jimi zvolenou cestou dostanou v časovém limitu ke spolužačce, a ne v případě neúspěchu. Cesta mezi každými dvěmi vstupy trvá 15 minut.

  3. B E A D C F Příklad 1 Kamarádi se nacházejí u vstupu A, jejich spolužačka u vstupu F. Uzel D se opravuje, tedy je nepřístupný. cesta(a,b). cesta(a,c). cesta(a,e). cesta(b,e). cesta(c,f). cesta(e,f).

  4. Příklad 1ověřování- existuje cesta obsahující pouze 1 přestup? cesta(a,b).cesta(a,c).cesta(a,e).cesta(b,e).cesta(c,f).cesta(e,f). test(Vstup,Pres,Vystup) :- cesta(Vstup,Pres),cesta(Pres,Vystup). ?-test(a,c,f). -> cesta(a,c) ok -> cesta(c,f) ok Yes Druhá možnost: Test1(Vstup,Vystup) :- cesta(Vstup,Pres), cesta(Pres,Vystup). ?-test1(a, f).  cesta(a,e), cesta(e,f) Yes (ale přes co?)

  5. Příklad 1hledání - která cesta vyhovuje? cesta(a,b).cesta(a,c).cesta(a,e).cesta(b,e).cesta(c,f).cesta(e,f). test(Vstup,Pres,Vystup) :- cesta(Vstup,Pres),cesta(Pres,Vystup). ?-test(a,X,f). -> cesta(a,X) X = b ->cesta(b,f) fail <- cesta(a,X) X = c ->cesta(c,f) ok X = c ; <-cesta(c,f) fail <- cesta(a,X) X = e ->cesta(e,f) ok X = e ; <-cesta(e,f) fail <- cesta(a,X) fail <-test(a,X,f) NO

  6. Příklad 2 zadání Stojí před vámi člověk. Máte zavázané oči, takže jej nevidíte a ani nesmíte s ním mluvit. Pouze víte následující: Osoba před vámi je postižená. Všichni, co jsou slepí nebo žijí, jsou hluší. Každý, kdo je hluchý a žije, je postižený. Každý, kdo je slepý a žije, je postižený. Všichni postižení jsou slepí. Otázka… Je tato osoba hluchá? P(a) x[(S(x)  Z(x))  H(x)] x[(H(x)  Z(x))  P(x)] x[(S(x)  Z(x))  P(x)] x[P(x)  S(x)] ------------------------------- H(a)

  7. Příklad 2 převod do log. programu P(a) x[(S(x)  Z(x))  H(x)] x[(H(x)  Z(x))  P(x)] x[(S(x)  Z(x))  P(x)] x[P(x)  S(x)] ------------------------------- H(a) postiz(a). hluchy(X):- slepy(X); zije(X). postiz(X):- hluchy(X), zije(X). postiz(X):- slepy(X), zije(X). slepy(X):- postiz(X). -------------------------------  ?- hluchy(a). Výpočet: 2. klauzule (X=a), ?- slepy(a) 5. klauzule (X=a), ?- postiz(a) 1. klauzule: YES

  8. Příklad 3 Vytvořte predikát suma(N,Suma), kde N je přirozené číslo a Suma je součet čísel od 1 do N. suma(1,1). suma(N,Suma) :- N1 is N-1, suma(N1,Suma1), Suma is Suma1 + N. ?-suma(2,X). ->N1 is 2 - 1 N1 = 1 ->suma(1,X1) X1 = 1 <-X is 1 + 2 X = 3 Predikát isje speciálnípredikát: na pravé straně musí být aritmetický výraz, jeho výsledek se unifikuje s proměnnou na levé straně.

  9. Příklad 3 Vytvořte predikát suma(N,Suma), kde N je přirozené čísloa Suma je součet čísel od 1 do N. suma(1,1). suma(N,Suma) :- N1 is N-1, suma(N1,Suma1), Suma is Suma1 + N. ?-suma(3,X). -> N1 is 3 - 1 N1 = 2 ->suma(2,X1) ->N11 is 2 - 1 N1 = 1 ->suma(1,X11) X11 = 1 <-X1 is 1+2 X1 = 3 <- X is 3 + 3 X = 6

  10. Příklad 4 Vytvořte predikát secti(Sez,Suma), kde Sez je seznam přirozených čísel a Suma je součet všech čísel v seznamu. secti([],0). secti([X|Y],Soucet) :- secti(Y,Soucet1), Soucet is Soucet1+X. ?-secti([1,2],X). ->secti([2],X1) -> secti([],X11) X11 = 0 <-X1 is 0 + 2 X1 = 2 <-X is 2 + 1 X = 3 Datová struktura seznam: „nekonečná uspořádaná n-tice“. Zadání tvaru [Hlava, Tělo], kde Hlava je prvek a Tělo je opět seznam. Prázdný seznam [].

More Related