WsdSI/LJK/z1
From WikiZMSI
Spis treści |
Laboratorium 1 --- wstęp do Prologu
Na zajęciach wykorzystywany będzie SWI Prolog. Oficjalna strona SWI Prolog zawiera dokumentację jak i wersję kompilatora na dowolną platformę.
Programowanie w Prologu - kilka użytecznych linków:
- strony w języku polskim:
- strony w języku angielskim:
Materiał na laboratoria jest głównie zaczerpnięty z książki "PROLOG Programming for Artificial Intelligence" Ivana Bratko (ISBN: 0-201-40375-7). W języku polskim dostępna jest pozycja "Prolog. Programowanie." autorstwa W.F. Clocksin i C.S. Mellish. wyd. Helion, Gliwice 2003.
Co należy wiedzieć zanim...:
- język deklaratywny;
- programowanie symboliczne;
- obiekty i relacje (przykład: Ala ma kota. Pomiędzy obiektami Ala i kot istnieje relacja posiadania jednokierunkowa.);
- reguły opisują relacje na podstawie innych relacji (przykład: Właściciel to ktoś kto coś posiada.);
- program składa się z faktów i reguł (klauzul/predykatów) zapisanych w odpowiedniej składni.
Deklarowanie faktów
1. Uruchomić interpreter SWI Prologu poleceniem
swipl
w powłoce (shell).
2. Sprawdzić znane prawdy o liczbach
3 > 2.
3. Utworzyć w edytorze tekstu plik o nazwie nowy.pl.
4. Wpisać do pliku następujące fakty (tylko fragmenty kodu w ramce):
- Ala lubi koty.
lubi( ala, koty).
- Marek lubi psy.
lubi( marek, psy).
- Ala jest kobietą.
kobieta( ala).
- Marek jest mężczyzną.
mezczyzna( marek).
5. Zapisać plik i skompilować poleceniem
['sciezka/nowy.pl'].
Zapytania
1. W trybie zapytań sprawdź odpowiedzi do wprowadzonych faktów:
- Czy Ala lubi koty?
lubi( ala, koty).
- Czy Marek jest kobietą?
kobieta( marek).
- Czy Jan jest mężczyzną?
mezczyzna( jan).
- Czy psy lubią Marka?
lubi( psy, marek).
2. Zadaj pytania ze zmiennymi:
- Czy jest coś co lubi Ala?
lubi( ala, X).
- Czy wiesz coś o istnieniu kobiet?
kobieta( Y).
- Czy psy są przez kogoś lubiane?
lubi( Ktos, psy).
Pytania złożone
- Czy Ala lubi koty i Marek lubi psy?
lubi( ala, koty),lubi( marek, psy).
- Czy Ala jest kobietą i Marek jest mężczyzną?
kobieta( ala), mezczyzna( marek).
- Czy jest coś co lubi zarówno Ala jak i Marek?
lubi( ala, X), lubi( marek, X).
- Czy jest coś co lubi ktoś lub ten ktoś jest kobietą?
lubi( Ktos, Cos); kobieta(Ktos).
Dodawanie reguł
1. W pliku źródłowym dopisz reguły:
- Marek lubi kobiety.
lubi( marek, X) :- kobieta( X).
- Ala lubi to co Marek.
lubi( ala, X) :- lubi( marek, X).
2. W trybie zapytań zapytaj:
- Co lubi Marek?
lubi( marek, X).
- Co lubi Ala?
lubi( ala, X).
Program o zależnościach rodzinnych
- Pobierz plik źródłowy do zależności rodzinnych ⇒ Rodzinka.pro
- Narysuj graf zależności pomiędzy osobami.
- Skompiluj źródło ( ['Rodzinka.pro']. ).
- Dodaj do źródła następujące reguły.
- Potomek child, to relacja odwrotna do rodzica parent.
- Matka mother, to rodzic parent płci żeńskiej female.
- Dziadek grandparent, to rodzic parent czyjegoś rodzica parent.
- Siostra sister, to ktoś kto ma tego samego rodzica parent i jest kobietą female.
- Przodek predecessor - poprzez rekurencyjne sprawdzanie poprzednich pokoleń rodziców parent.
predecessor( X, Z) :- parent( X, Z). predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z).
Jak Prolog odpowiada na pytania
Zapisane w źródle fakty i reguły analizowane są od góry do dołu w kolejności wprowadzenia. Szukany jest fakt potwierdzający zapytanie. Jeżeli w pytaniu jest zmienna w trakcie wyszukiwania odpowiedzi jest ukonkretniana (unifikowana - podstawiane są pod nią stałe wartości - atomy). Jeżeli zapytanie jest złożone, to zawsze poszukuje się potwierdzenia predykatów od lewego do skrajnie prawego. Powrót do wcześniejszych predykatów celem sprawdzenia wszystkich kombinacji nazywa się nawracaniem (backtracking).
Zadania do wykonania w domu
- Stworzyć plik źródłowy opisujący wpisaną w tabelce wiedzę w Prologu. Skompilować i uruchomić program i zadać odpowiednie dla opracowywanej bazy wiedzy pytania.
zadanie | Treść |
1 | Adam nie pracuje. Ewa pracuje. Anna pracuje. Aleks pracuje. Adam i Ewa są małżeństwem. Anna i Aleks są małżeństwem. Aleks jest małomówny. Anna jest dominująca. Ewa jest niewierna. Jeżeli ktoś nie pracuje to ma problemy finansowe. Jeżeli ktoś mało mówi lub jest dominujący, to ma problemy z komunikacją z partnerem. Problemy małżeńskie są wynikiem braku zatrudnienia obojga partnerów lub gdy komunikacja pomiędzy partnerami jest zachwiana. Problemy małżeńskie są wynikiem zdrady jednego z partnerów.
Pytania: Kto jest mężem Anny? Jakie małżeństwo ma jakie problemy z powodu męża? Czy małżeństwo Adama ma problemy? |
2 | Ręka jest częścią ciała. Głowa jest częścią ciała. Włosy są częścią głowy, Cebulki są częścią włosów. Oczy są częścią głowy. Oczy mogą być kolory niebieskiego, zielonego, brązowego lub czarnego. Włosy mogą być koloru blond, brąz, czarne. Coś jest ciemnego koloru gdy jest brązowe lub czarne. Coś jest jasnego koloru, gdy jest niebieskie, zielone lub blond. Każdy X należy do pewnej całości Y, gdy X jest częścią Y. Każdy X należy do pewnej całości Y, gdy X jest częścią Z, a Z należy do całości Y.
Pytania: Jakie kolory są wspólne dla oczu i włosów? Jakie części należące do ciała są koloru jasnego? Do jakich całości należą oczy? |
3 | Dane jest zachowanie dwuwejściowe bramki logicznej AND. Zatem wiemy, że na sygnał 1 i 1 odpowiedź jest 1. Analogicznie dane jest zachowania inwertera (NOT) i dwuwejściowej bramki OR. Wiemy, że NAND to jest bramka AND i NOT. Wiemy, że NOR to bramka OR i AND. Wiemy, że EXOR to suma wyjść z dwóch bramek AND, które na wejście przyjmują: AND 1-szy: sygnał wejściowy pierwszy i drugi zanegowany, a AND 2-gi sygnał wejściowy drugi i pierwszy zanegowany.
Pytania: Jakie sygnały wejściowe trzeba podać by otrzymać wyjście 1 z EXOR? Jeżeli jeden z sygnałów wejściowych NOR jest równy jeden to jakie są wartości drugiego wejścia, by wyjście było równe zero? Jaka jest odpowiedź układu z rysunku ? |
4 | Wiemy, że istnieje pewien graf, którego węzły są połączone w jednym kierunku. I tak odpowiednio połączone są węzły: "o" z "p", "p" z "r", "p" z "s", "s" z "u". Wiemy, że istnieje przejście od pewnego węzła X do węzła Y, gdy węzeł X i węzeł Y są połączone. Wiemy też, że istnieje przejście od pewnego węzła X do węzła Y, gdy pomiędzy X i Y jest węzeł Z, który jest połączony z X i z Z istnieje przejście do Y.
Pytania: Czy istnieje przejście z węzła p do u? Czy istnieje przejście z węzła u do p? Czy istnieje połączenie z węzła o, które łączy się z węzłem z którego prowadzi ścieżka do u? |