1 / 17

Programovací jazyk Prolog

Programovací jazyk Prolog. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http ://www.cs.vsb.cz/benes Miroslav.Benes @vsb.cz. Obsah. Logický program Fakt, dotaz, pravidlo Term, substituce Logická proměnná Rekurzivní pravidla Seznamy. Úvod.

Download Presentation

Programovací jazyk 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. Programovací jazyk Prolog doc. Ing. Miroslav Beneš, Ph.D.katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benesMiroslav.Benes@vsb.cz

  2. Obsah • Logický program • Fakt, dotaz, pravidlo • Term, substituce • Logická proměnná • Rekurzivní pravidla • Seznamy Programovací jazyk Prolog

  3. Úvod • Hlavní myšlenka: Využití počítače k vyvozování důsledkůna základě deklarativního popisu • Postup: • reálný svět  • zamýšlená interpretace  • logický model  • program • Výpočet - určení splnitelnosti či nesplnitelnosti cíle, případně včetně vhodných substitucí. Programovací jazyk Prolog

  4. Logický program • Fakta vek(petr, 30). vek(jana, 24). • Pravidlastarsi(X,Y) :- vek(X,V1),vek(Y,V2),V1>V2. • Dotazy ?- starsi(petr, jana). Yes Programovací jazyk Prolog

  5. Co je to dotaz? • Odpověď na dotaz vzhledem k programu = určení, zda je dotaz logickým důsledkem programu. • Logické důsledky se odvozují aplikací dedukčních pravidel, např. P ├ P (identita) • Je-li nalezen fakt identický dotazu, dostaneme Yes. • Odpověď No znamená pouze to, že z programu nelze platnost dotazu vyvodit. Programovací jazyk Prolog

  6. Předpoklad uzavřeného světa zvire(pes). zvire(kocka). ?- zvire(pes). Yes ?- zvire(zirafa). No => Předpokládáme platnost pouze toho, co je uvedeno v programu. Programovací jazyk Prolog

  7. Logická proměnná • Představuje nespecifikovaný objekt • Jméno začíná velkým písmenem ?- vek(jana, X). X = 24. ?- vek(pavla, X). No • Existuje X takové, že vek(jana, X) lze odvodit z programu? Pokud ano, jaká je hodnota X? Programovací jazyk Prolog

  8. Kvantifikátory • likes(X, beer).Pro všechna X platí likes(X, beer). • ?- likes(X, beer).Existuje X takové, že likes(X, beer)? Programovací jazyk Prolog

  9. Term • Datová struktura definovaná rekurzivně: • Konstanty a proměnné jsou termy • Struktury jsou termy:funktor(arg1, arg2, …) • funktor: jméno začínající malým písmenem • argument: term • Funktor je určen jménem a aritou • f(t1, t2, …, tn) …. f/n • Příklad: • z/0 s/1 … z, s(z), s(s(z)), s(s(s(z))) Programovací jazyk Prolog

  10. Substituce • Základní term (ground term) • neobsahuje proměnné s(s(z)) • Substituce • Konečná množina dvojic ve tvaru Xi=ti • Aplikace substituce  na term A … Af(X, a) {X=g(z), Y=b} = f(g(z), a) • Instance termu • A je instancí B, existuje-li substituce  taková, že A = Bf(g(z), a) je instancí termu f(X, a) Programovací jazyk Prolog

  11. Konjunktivní dotazy • ?- zvire(pes), zvire(kocka).Yes Sdílení proměnných: • ?- vek(X, V), vek(Y, V).Existují X a Y se stejným věkem? Programovací jazyk Prolog

  12. Pravidla • A :- B1, B2, …, Bn.A = hlava pravidlaB1, B2, …, Bn = tělo pravidla • syn(X, Y) :- otec(Y, X), muz(X).deda(X, Y) :- otec(X, Z), otec(Z, Y). • Proměnné jsou univerzálně kvantifikované. • Platnost proměnných je celé pravidlo. Programovací jazyk Prolog

  13. Rekurzivní pravidla a • Definice grafuedge(a, b). edge(a, c). edge(b, d).edge(c, d). edge(d, e). edge(f, g). • connected(N, N).connected(N1, N2) :- edge(N1, L), connected(L, N2). b c d f e g Programovací jazyk Prolog

  14. Rekurzivní pravidla • Přirozená čísla:nat(z).nat(s(X)) :- nat(X). • leq(z, X) :- nat(X).leq(s(X), s(Y)) :- leq(X, Y). • add(z, X, X).add(s(X), Y, s(Z)) :- add(X, Y, Z). Programovací jazyk Prolog

  15. Pracujeme s relacemi! • add(s(z), s(z), X).X=s(s(z)) • add(s(z), X, s(s(z))).X=s(z) • add(X, Y, s(s(z))).X=z Y=s(s(z)) ;X=s(z) Y=s(z) ;X=s(s(z)) Y=z ;No Programovací jazyk Prolog

  16. Seznamy • list([]).list([X|Xs]) :- list(Xs). • member(X,[X|Xs]).member(X,[Y|Ys]) :- member(X,Ys). • ?- member(b, [a,b,c]). • ?- member(X, [a,b,c]). • ?- member(b, X) Programovací jazyk Prolog

  17. Úkol • Vytvořte predikát times/3 reprezentující operaci násobení • Vytvořte predikáty even/1 a odd/1 pro ověření, zda je zadané číslo sudé, resp. liché. • Vytvořte predikát prefix/2 pro zjištění, zda je jeden seznam prefixem druhého seznamu. Programovací jazyk Prolog

More Related