WsdSI/LBioJK/z7
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).