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:

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

  1. Pobierz plik źródłowy do zależności rodzinnych ⇒ Rodzinka.pro
  2. Narysuj graf zależności pomiędzy osobami.
  3. Skompiluj źródło ( ['Rodzinka.pro']. ).
  4. 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).