1 / 51

Prolog

Prolog. Wykorzystano materiały z „Programowanie w logice. Prolog” c 2007–2009 by P. Fulmanski (ostatnia modyfikacja: 18 maja 2009) - http://math.uni.lodz.pl/~fulmanp/zajecia/prolog/wyklad.pdf. Proste fakty. Spółka A jest rentowna, spółka B jest rentowna …. stała. predykat.

donat
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 Wykorzystano materiały z „Programowanie w logice. Prolog” c 2007–2009 by P. Fulmanski (ostatnia modyfikacja: 18 maja 2009) - http://math.uni.lodz.pl/~fulmanp/zajecia/prolog/wyklad.pdf

  2. Proste fakty • Spółka A jest rentowna, spółka B jest rentowna …. stała predykat jest_rentowna(spolka_A). jest_rentowna(spolka_B). jest_rentowna(spolka_C). spolka_A(jest_rentowna). spolka_B(jest_rentowna). spolka_C(jest_rentowna).

  3. Weryfikacja prostych faktów 1 ?- jest_rentowna(spolka_A). true. 2 ?- spolka_A(jest_rentowna). true. 3 ?- jest_rentowna(spolka_X). false.

  4. Zmienne w zapytaniach 4 ?- jest_rentowna(Ktore_spolki). Ktore_spolki = spolka_A ; Ktore_spolki = spolka_B ; Ktore_spolki = spolka_C. 5 ?- spolka_A(Jaka_jest). Jaka_jest = jest_rentowna. 6 ?- spolka_B(Jaka_jest). Jaka_jest = jest_rentowna. Zmienna

  5. Więcej predykatów jest_rentowna(spolka_A). jest_rentowna(spolka_B). jest_rentowna(spolka_C). jest_nierentowna(spolka_D). jest_nierentowna(spolka_E). spolka_A(jest_rentowna). spolka_B(jest_rentowna). spolka_C(jest_rentowna). spolka_D(jest_nierentowna). spolka_E(jest_nierentowna).

  6. Nowe zapytanie 1 ?- jest_nierentowna(Ktore_spolki). Ktore_spolki = spolka_D ; Ktore_spolki = spolka_E.

  7. Predykat dwuargumentowy rentownosc(spolka_A, jest_rentowna). rentownosc(spolka_B, jest_rentowna). rentownosc(spolka_C, jest_rentowna). rentownosc(spolka_D, jest_nierentowna). rentownosc(spolka_E, jest_nierentowna). spolka_A(rentownosc, jest_rentowna). spolka_B(rentownosc, jest_rentowna). spolka_C(rentownosc, jest_rentowna). spolka_D(rentownosc, jest_nierentowna). spolka_E(rentownosc, jest_nierentowna).

  8. Predykat dwuargumentowy 2 ?- rentownosc(KtoraSpolka,JakaJest). KtoraSpolka = spolka_A, JakaJest = jest_rentowna ; KtoraSpolka = spolka_B, JakaJest = jest_rentowna ; KtoraSpolka = spolka_C, JakaJest = jest_rentowna ; KtoraSpolka = spolka_D, JakaJest = jest_nierentowna ; KtoraSpolka = spolka_E, JakaJest = jest_nierentowna.

  9. Predykat dwuargumentowy 3 ?- spolka_A(CoOceniamy,JakiWynik). CoOceniamy = rentownosc, JakiWynik = jest_rentowna. 4 ?- spolka_A(rentownosc,JakiWynik). JakiWynik = jest_rentowna. 6 ?- spolka_A(CoOceniamy,jest_rentowna). CoOceniamy = rentownosc.

  10. Dodajemy fakty zadluzenie(spolka_A, brak). zadluzenie(spolka_B, przecietne). zadluzenie(spolka_C, wysokie). zadluzenie(spolka_D, brak). zadluzenie(spolka_E, brak). spolka_A(zadluzenie, brak). spolka_B(zadluzenie, przecietne). spolka_C(zadluzenie, wysokie). spolka_D(zadluzenie, brak). spolka_E(zadluzenie, brak).

  11. Wnioskujemy 1 ?- spolka_A(zadluzenie, JakieJestZadluzenie). JakieJestZadluzenie = brak. 2 ?- spolka_A(Atrybut, Wartosc). Atrybut = rentownosc, Wartosc = jest_rentowna ; Atrybut = zadluzenie, Wartosc = brak. 4 ?- zadluzenie(Spolka,brak). Spolka = spolka_A ; Spolka = spolka_D ; Spolka = spolka_E.

  12. Wnioskujemy 3 ?- zadluzenie(Spolka,JakieJestZadluzenie). Spolka = spolka_A, JakieJestZadluzenie = brak ; Spolka = spolka_B, JakieJestZadluzenie = przecietne ; Spolka = spolka_C, JakieJestZadluzenie = wysokie ; Spolka = spolka_D, JakieJestZadluzenie = brak ; Spolka = spolka_E, JakieJestZadluzenie = brak.

  13. Predykat, w którym argumentami są predykaty kredyt(zadluzenie(spolka_A,brak), rentownosc(spolka_A, jest_rentowna)). 1 ?- kredyt(JakieJestZadluzenie, JakaJestRentownosc). JakieJestZadluzenie = zadluzenie(spolka_A, brak), JakaJestRentownosc = rentownosc(spolka_A, jest_rentowna).

  14. Reguły IF AND zdolnosc_kredytowa_OK(Spolka):- zadluzenie(Spolka,brak), rentownosc(Spolka,jest_rentowna). 1 ?- zdolnosc_kredytowa_OK(spolka_A). true. 2 ?- zdolnosc_kredytowa_OK(ZdolnoscKredytowaMaja). ZdolnoscKredytowaMaja = spolka_A ; false.

  15. Dodatkowa reguła zdolnosc_kredytowa_OK(Spolka):- zadluzenie(Spolka, przecietne), rentownosc(Spolka,jest_rentowna). 1 ?- zdolnosc_kredytowa_OK(ZdolnoscKredytowaMaja). ZdolnoscKredytowaMaja = spolka_A ; ZdolnoscKredytowaMaja = spolka_B. 2 ?- zdolnosc_kredytowa_OK(spolka_C). false. 3 ?- zdolnosc_kredytowa_OK(spolka_B). true.

  16. Zastosowanie predykatu dwuargumentowego zdolnosc_kredytowa(Spolka,ok):- zadluzenie(Spolka,brak), rentownosc(Spolka,jest_rentowna). zdolnosc_kredytowa(Spolka,ok):- zadluzenie(Spolka, przecietne), rentownosc(Spolka,jest_rentowna). zdolnosc_kredytowa(Spolka,warunkowo):- zadluzenie(Spolka,brak), rentownosc(Spolka,jest_nierentowna).

  17. Wnioskowanie 2 ?- zdolnosc_kredytowa(Spolka, Ocena). Spolka = spolka_A, Ocena = ok ; Spolka = spolka_B, Ocena = ok ; Spolka = spolka_D, Ocena = warunkowo ; Spolka = spolka_E, Ocena = warunkowo.

  18. Wnioskowanie 3 ?- zdolnosc_kredytowa(Spolka, ok). Spolka = spolka_A ; Spolka = spolka_B. 4 ?- zdolnosc_kredytowa(Spolka, warunkowo). Spolka = spolka_D ; Spolka = spolka_E. 5 ?- zdolnosc_kredytowa(spolka_A, Ocena). Ocena = ok ; false. 6 ?- zdolnosc_kredytowa(spolka_C, Ocena). false.

  19. Nowe fakty i reguły obroty_mln(spolka_A, 0.1). obroty_mln(spolka_B, 1.5). obroty_mln(spolka_C, 2). obroty_mln(spolka_D, 5). obroty_mln(spolka_E, 12). zdolnosc_kredytowa(Spolka,ok):- zadluzenie(Spolka, przecietne), rentownosc(Spolka,jest_rentowna), obroty_mln(Spolka,X), X>1, X<3.

  20. Wnioskowanie 8 ?- zdolnosc_kredytowa(X,Y). X = spolka_B, Y = ok. 9 ?- zdolnosc_kredytowa(Spolka,ok). Spolka = spolka_B.

  21. Prolog – baza danych

  22. Studenci - przedmioty jest_na_liscie('Jan Kot', 'TSI'). jest_na_liscie('Ala Osa', 'TSI'). jest_na_liscie('Adam Pies', 'TSI'). jest_na_liscie('Jan Słoń', 'TSI'). jest_na_liscie('Ewa Mysz', 'TSI'). jest_na_liscie('Jan Kot', 'BD'). jest_na_liscie('Ala Osa', 'BD'). jest_na_liscie('Adam Pies', 'BD'). jest_na_liscie('Jan Słoń', 'BD').

  23. Prowadzący zjęcia egzaminuje('Andrzej Macioł', 'TSI'). egzaminuje('Jurek Duda', 'BD').

  24. Reguła - zapisy zapisy(Prowadzacy,Przedmiot,Student):- jest_na_liscie(Student,Przedmiot), egzaminuje(Prowadzacy,Przedmiot).

  25. Pełne listy zapisów 8 ?- zapisy(Prowadzacy,Przedmiot,Student). Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI', Student = 'Jan Kot' ; Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI', Student = 'Ala Osa' ; Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI', Student = 'Adam Pies' ; Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI', Student = 'Jan Słoń' ; Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI', Student = 'Ewa Mysz' ……………..

  26. Pytania szczegółowe 9 ?- zapisy(Prowadzacy,Przedmiot, 'Ala Osa'). Prowadzacy = 'Andrzej Macioł', Przedmiot = 'TSI' ; N Prowadzacy = 'Jurek Duda', Przedmiot = 'BD'. wszystko jedno co 10 ?- zapisy(_,'TSI',Student). Student = 'Jan Kot' ; Student = 'Ala Osa' ; Student = 'Adam Pies' ; Student = 'Jan Słoń' ; Student = 'Ewa Mysz'

  27. Dodatkowe dane egzamin('2012-09-18', 'Jan Kot', 'TSI', 3.0). egzamin('2012-09-18', 'Ala Osa', 'TSI', 3.5). egzamin('2012-09-18', 'Adam Pies', 'TSI', 4.0). egzamin('2012-09-18', 'Jan Słoń', 'TSI', 2.0). egzamin('2012-09-18', 'Ewa Mysz', 'TSI', 5.0). egzamin('2012-09-20', 'Jan Słoń', 'TSI', 3.0). egzamin('2012-09-19', 'Jan Kot', 'BD', 5.0). egzamin('2012-09-19', 'Ala Osa', 'BD', 4.0). egzamin('2012-09-19', 'Adam Pies', 'BD', 3.0). egzamin('2012-09-19', 'Jan Słoń', 'BD', 3.5).

  28. Reguły – wyniki egzaminu uzyskal_ocene(Student, Przedmiot, Prowadzacy, Data, Ocena):- egzaminuje(Prowadzacy, Przedmiot), egzamin(Data, Student, Przedmiot, Ocena).

  29. Pełny przegląd 7 ?- uzyskal_ocene(Student,Przedmiot,Prowadzacy,Data,Ocena). Student = 'Jan Kot', Przedmiot = 'TSI', Prowadzacy = 'Andrzej Macioł', Data = '2012-09-18', Ocena = 3.0 ; Student = 'Ala Osa', Przedmiot = 'TSI', Prowadzacy = 'Andrzej Macioł', Data = '2012-09-18', Ocena = 3.5 ; Student = 'Adam Pies', Przedmiot = 'TSI', Prowadzacy = 'Andrzej Macioł', Data = '2012-09-18', Ocena = 4.0 ………..

  30. Pytania szczególowe 1 ?- uzyskal_ocene('Adam Pies', 'TSI',_,Data,Ocena). Data = '2012-09-18', Ocena = 4.0 ; false. 2 ?- uzyskal_ocene('Ewa Mysz', 'TSI', Prowadzacy,Data,Ocena). Prowadzacy = 'Andrzej Macioł', Data = '2012-09-18', Ocena = 5.0. 3 ?- uzyskal_ocene('Jan Słoń', 'TSI', Prowadzacy,Data,Ocena). Prowadzacy = 'Andrzej Macioł', Data = '2012-09-18', Ocena = 2.0 ; Prowadzacy = 'Andrzej Macioł', Data = '2012-09-20', Ocena = 3.0 ;

  31. Związki między obiektami Wykorzystano źródła: http://www.cse.un sw.edu.au/~cs9414/Labs/family.pl.solution.html http://www.cse.unsw.edu.au /~cs9414/Labs/lab.html

  32. Rodzice - dzieci % parent(Parent, Child) % parent(albert, jim). parent(albert, peter). parent(jim, brian). parent(john, darren). parent(peter, lee). parent(peter, sandra). parent(peter, james). parent(peter, kate). parent(peter, kyle). parent(brian, jenny). parent(irene, jim). parent(irene, peter). parent(pat, brian). parent(pat, darren). parent(amanda, jenny).

  33. Płeć % female(Person) % female(irene). female(pat). female(lee). female(sandra). female(jenny). female(amanda). female(kate). % male(Person) % male(albert). male(jim). male(peter). male(brian). male(john). male(darren). male(james). male(kyle).

  34. Rok urodzenia % yearOfBirth(Person, Year). % yearOfBirth(irene, 1923). yearOfBirth(pat, 1954). yearOfBirth(lee, 1970). yearOfBirth(sandra, 1973). yearOfBirth(jenny, 1996). yearOfBirth(amanda, 1979). yearOfBirth(albert, 1926). yearOfBirth(jim, 1949). yearOfBirth(peter, 1945). yearOfBirth(brian, 1974). yearOfBirth(john, 1955). yearOfBirth(darren, 1976). yearOfBirth(james, 1969). yearOfBirth(kate, 1975). yearOfBirth(kyle, 1976).

  35. Szukamy dziadków i babć % grandparent(Grandparent, Grandchild) % means Grandparent is a grandparent of Grandchild % grandparent(Grandparent, Grandchild) :- parent(Grandparent, Child), parent(Child, Grandchild).

  36. Wyniki 3 ?- grandparent(Grandparent, Grandchild). Grandparent = albert, Grandchild = brian ; Grandparent = albert, Grandchild = lee ; Grandparent = albert, Grandchild = sandra ; Grandparent = albert, Grandchild = james ; Grandparent = albert, Grandchild = kate ; Grandparent = albert, Grandchild = kyle ; Grandparent = jim, Grandchild = jenny; ……………..

  37. Kto jest starszy? % older(A,B) % means A is older than B % older(A,B) :- yearOfBirth(A, Y1), yearOfBirth(B, Y2), Y2 > Y1.

  38. Wyniki 5 ?- older(A,B). A = irene, B = pat ; A = irene, B = lee ; A = irene, B = sandra ; A = irene, B = jenny ; ……….. A = kate, B = kyle ; A = kyle, B = jenny ; A = kyle, B = amanda ; false.

  39. Rodzeństwo % siblings(A,B) % means A and B are siblings % siblings(A,B) :- parent(X, A), % A & B share a common parent parent(X,B), % A \== B. % A is different from B

  40. Wyniki 6 ?- siblings(A,B). A = jim, B = peter ; A = peter, B = jim ; A = lee, B = sandra ; A = lee, B = james ; A = lee, 7 ?- siblings(peter,B). B = jim ; B = jim ; false.

  41. Starsi bracia % olderBrother(A,B) % means A is an older brother of B % olderBrother(A,B) :- siblings(A, B), male(A), older(A, B).

  42. Wyniki 8 ?- olderBrother(A,B). A = peter, B = jim ; A = james, B = lee ; A = james, B = sandra ; A = james, B = kate ; A = james, B = kyle ; A = peter, B = jim ; A = brian, B = darren ; false.

  43. Potomkowie % descendant(Person, Descendant) % means Descendant is a descendant of Person. % descendant(Person, Descendant) :- parent(Person, Descendant). descendant(Person, Descendant) :- parent(Person, Child), descendant(Child, Descendant).

  44. Wyniki 9 ?- descendant(Person, Descendant). Person = albert, Descendant = jim ; Person = albert, Descendant = peter ; Person = jim, Descendant = brian ; Person = john, Descendant = darren ; Person = peter, Descendant = lee ; …………….. Person = irene, Descendant = kate ; Person = irene, Descendant = kyle ; Person = pat, Descendant = jenny ; false.

  45. Przodkowie % ancestor(Person, Ancestor) % means Ancestor is an ancestor of Person. % % This is functionally equivalent to descendant(Ancestor, Person). % ancestor(Person, Ancestor) :- parent(Ancestor, Person). ancestor(Person, Ancestor) :- parent(Parent, Person), ancestor(Parent, Ancestor).

  46. Wyniki 10 ?- ancestor(jenny, Ancestor). Ancestor = brian ; Ancestor = amanda ; Ancestor = jim ; Ancestor = pat ; Ancestor = albert ; Ancestor = irene ; false.

  47. Sieć powiązań własnościowych Nazwa córki Udział matki

  48. Baza wiedzy i fakty jest_spolka_zalezna(Matka,Zalezna):- jest_spolka_matka(Matka,Zalezna). jest_spolka_zalezna(Matka,Zalezna):- jest_spolka_matka(Matka,Corka), jest_spolka_zalezna(Corka,Zalezna). jest_spolka_matka(Matka,Corka):- udzial(Matka,Corka,X), X>50. udzial(ambergold,spolkaA,55). udzial(ambergold,spolkaB,60). udzial(spolkaA,spolkaC,90). udzial(spolkaA,spolkaD,60). udzial(spolkaC,spolkaE,75). udzial(spolkaC,spolkaF,51). udzial(spolkaB,spolkaG,23). udzial(spolkaB,spolkaH,71).

  49. Wyniki 20 ?- jest_spolka_zalezna(Matka,Corka). Matka = ambergold, Corka = spolkaA ; Matka = ambergold, Corka = spolkaB ; Matka = spolkaA, Corka = spolkaC ; Matka = spolkaA, Corka = spolkaD ; Matka = spolkaC, Corka = spolkaE ; Matka = spolkaC, Corka = spolkaF ; Matka = spolkaB, Corka = spolkaH ; Matka = ambergold, Corka = spolkaC ; Matka = ambergold, Corka = spolkaD ; Matka = ambergold, Corka = spolkaE ; Matka = ambergold, Corka = spolkaF ; Matka = ambergold, Corka = spolkaH ; Matka = spolkaA, Corka = spolkaE ; Matka = spolkaA, Corka = spolkaF ; false.

  50. Wyniki szczegółowe 21 ?- jest_spolka_zalezna(ambergold,Corka). Corka = spolkaA ; Corka = spolkaB ; Corka = spolkaC ; Corka = spolkaD ; Corka = spolkaE ; Corka = spolkaF ; Corka = spolkaH ; false.

More Related