przygotował Dariusz Wardowski 1 Stefan, Barbara
Waldemar, Krystyna Czesława, Tadeusz
Karolina Paweł Sylwester
Paradygmaty programowania - Laboratorium 11 (Prolog) Wiadomości wstępne:
I. Polecenia kompilatora:
[nazwa_pliku]. kompilacja pliku [‘nazwa_pliku.rozszerzenie’]. kompilacja pliku
halt. zakończenie programu
help. pomoc
help(słowo) . pomoc na temat polecenia słowo.
help(2). pomoc z rozdziału 2
apropos(słowo). informacja na temat słowo.
listing. zawartość aktualnej bazy danych
listing(fakt). wyświetlenie informacji na temat danego faktu
pwd. wyświetlenie bieżącego katalogu roboczego
ls. wyświetlenie listy plików katalogu bieżącego
cd zmiana katalogu roboczego
emacs. uruchomienie edytora emacs
emacs(‘nazwa.pl’).
II. Trochę składni:
składnia faktu: nazwa_relacji(argument1, argument2, …, argumentn) . składnia reguły: <lewaCzesc> :- <prawaCzesc>.
operatory logiczne: i (,), lub (;), negacja (\+),
Zadanie 1. Utwórz plik o nazwie rodzina.pl i umieść w nim fakty i reguły dotyczące następującego drzewa genealogicznego:
1) Umieść w bazie następujące relacje: rodzic, mezczyzna, kobieta.
Przykład relacji: rodzic(stefan,krystyna).
przygotował Dariusz Wardowski 2 2) Zapisz reguły matka, ojciec, dziecko, brat, siostra, ciotka, wujek, wnuk, przodek, szwagier,
rodzenstwo.
Przykład reguły:
matka(X,Y) :- rodzic(X,Y), kobieta(X).
3)Zadaj następujące pytania (cele):
a) Sprawdź poprawność faktów, np.:
?- rodzic(stefan,krystyna).
true
?- kobieta(czeslawa).
true
?-
b) sprawdź poprawność reguł, np.:
?- brat(pawel,karolina). (czy Paweł jest bratem Karoliny?) true
?- wnuk(pawel,barbara). (czy Paweł jest wnukiem Barbary?) true
c) zapytania ze zmiennymi, np.:
?- kobieta(X). (jakie kobiety są w rodzinie?) X = barbara;
X = krystyna;
X = karolina;
X = czeslawa;
?- wnuk(pawel,X). (czyim wnukiem jest Paweł?) X = barbara;
X = stefan.
?- brat(pawel,_). (Wykorzystanie zmiennej anonimowej, czy paweł ma rodzeństwo?) true
Zadanie 2. Napisz program z wykorzystaniem rekurencji, dodający dwie liczby naturalne.
Wykorzystać następującą równość:
x+y=(x+(y-1))+1 Przykładowe działanie programu:
?- dodaj(10,2,12).
true
?- dodaj(10,13,X).
X=23
Zadanie 3. Napisz program z wykorzystaniem rekurencji, mnożący dwie liczby naturalne.
Wykorzystać następującą równość:
x*y=(x*(y-1))+y
przygotował Dariusz Wardowski 3 Zadanie 4. Napisać program realizujący silnię.
Zadanie 5. Napisać program obliczający liczby Fibonacciego.
Zadanie 6. Napisać następujące fakty i regułę:
ladniejsza(zosia,marysia).
ladniejsza(marysia,ewa).
ladniejsza(zosia,ania).
ladniejsza(ula,zosia).
ladniejsza(X,Y) :- ladniejsza(X,Z), ladniejsza(Z,Y).
Zadać następujący cel:
?- ladniejsza(X,Y).
Poprawić działanie powyższego programu.