PROGRAMOWANIE DEKLARATYWNE, ZADANIA
ZADANIE 1
Zapisz w postaci programu prologowego nastepujace stwierdzenia:
1. Marta lubi wino, mandarynki, tenis i kwiaty.
2. Piotr lubi banany, wino i tenis.
3. Jan lubi wszystko to, co lubi Piotr.
4. Ania lubi te rzeczy, które lubia jednoczesnie Marta i Jan.
% Program: lubi
% Definiowane predykaty:
% lubi/2
% _________________________
% lubi/2
% lubi(X,Y): spełniony, gdy X lubi Y
% ------------------------- lubi/2
lubi(marta,wino).
lubi(marta,mandarynki).
lubi(marta,tenis).
lubi(marta,kwiaty).
lubi(piotr,banany).
lubi(piotr,wino).
lubi(piotr,tenis).
lubi(jan,X):-lubi(piotr,X).
lubi(ania,X):-lubi(marta,X),lubi(jan,X).
% ------------------------- lubi/2
Przeprowadzajac odpowiednia sesje prologowa odpowiedz na pytania:
1. Czy Piotr lubi wino?
2. Co lubi Piotr?
3. Co lubi Marta?
4. Czy Marta cos lubi?
5. Kto lubi tenis?
6. Czy ktos lubi jabłka?
7. Co lubi Ania?
*/ sesja prologowa
2 ?- lubi(piotr,wino).
true .
3 ?- lubi(piotr,X).
X = banany ;
X = wino ;
X = tenis.
4 ?- lubi(marta,X).
X = wino ;
X = mandarynki ;
X = tenis ;
X = kwiaty.
5 ?- lubi(marta,_).
true .
6 ?- lubi(X,tenis).
X = marta ;
X = piotr ;
X = jan ;
X = ania ;
false.
7 ?- lubi(_,jablka).
false.
8 ?- lubi(ania,X).
X = wino ;
X = tenis ;
false.
/*
ZADANIE 2
Zapisz w postaci programu prologowego nastepujace stwierdzenia:
1. Ola jest madra.
2. Ala jest piekna i dobra.
3. Piotr jest piekny i silny.
4. Adam jest dobry i madry.
5. Jan jest bogaty.
6. Ula jest bogata i silna.
7. Wszyscy me1czyzni lubia piekne kobiety.
8. Wszyscy bogaci ludzie sa szczesliwi.
9. Ka1da kobieta, która lubi me1czyzne z wzajemnoscia z jego strony, jest szczesliwy.
10. Ka1dy me1czyzna, który lubi kobiete z wzajemnoscia z jej strony, jest szczesliwy.
11. Ula lubi wszystkich me1czyzn, którzy je lubia.
12. Ola lubi wszystkich ludzi, którzy ja lubia, pod warunkiem, 1e sa albo bogaci i dobrzy,
albo piekni i silni.
Uzyskaj odpowiedz na pytanie: kto jest szczesliwy?
% Program: szczesliwy
% Definiowane predykaty:
% jest/2, men/1, kobieta/1, lubi/2, szczesliwy/1
% _____________________
% jest/2
% jest(X,Y): spełniony, gdy Y jest prawdziwe dla X
% --------------------- jest/2
jest(ola,madry).
jest(ala,piekny).
jest(ala,dobry).
jest(piotr,piekny).
jest(piotr,silny).
jest(adam,dobry).
jest(adam,madry).
jest(jan,bogaty).
jest(ula,bogaty).
jest(ula,silny).
% --------------------- jest/2
% men/1
% men(X): spełniony, gdy X jest mężczyzną
% ---------------------- men/1
men(piotr).
men(adam).
men(jan).
% ----------------------- men/1
% kobieta/1
% kobieta(X): spełniony, gdy X jest kobietą
% ---------------------- kobieta/1
kobieta(ola).
kobieta(ala).
kobieta(ula).
% ----------------------- kobieta/1
% lubi/2
% lubi(X,Y): spełniony, gdy X lubi Y
% --------------------- lubi/2
lubi(X,Y):-men(X),kobieta(Y),jest(Y,piekny).
lubi(ula,X):-men(X),lubi(X,ula).
lubi(ola,X):-X\==ola,lubi(X,ola),jest(X,bogaty),jest(X,dobry).
lubi(ola,X):-X\==ola,lubi(X,ola),jest(X,piekny),jest(X,silny).
% --------------------- lubi/2
% szczesliwy/1
% szczesliwy(X):- spełniony, gdy X jest szczęśliwy
% --------------------- sczesliwy/1
szczesliwy(X):-jest(X,bogaty).
szczesliwy(X):-kobieta(X),lubi(X,Y),lubi(Y,X).
szczesliwy(X):-men(X),lubi(X,Y),lubi(Y,X).
% --------------------- szczesliwy/1
*/ sesja prologowa
2 ?- szczesliwy(X).
X = jan ;
X = ula ;
false.
/*
ZADANIE 3
Znajdz przyjaciół (ludzi, którzy sie nawzajem lubia) w grupie osób o nastepujacych
upodobaniach:
1. Ola lubi jaroszy, którzy dodatkowo uprawiaja sport;
2. Ewa lubi spedzac czas wsród niepalacych jaroszy;
3. Iza preferuje miłosników ksia1ek lub aktywnych sportowo wrogów tytoniu;
4. Janek najlepiej czuje sie wsród uprawiajacych sport;
5. Piotr mo1e sie zaprzyjaznic z uprawiajacymi sport jaroszami albo z zapalonymi
czytelnikami ksia1ek;
6. Paweł wymaga od przyjaciela, by był jaroszem, uprawiał sport i lubił czytac ksiazki;
jesli Ola, Ewa, Jan i Paweł sa jaroszami, Iza, Piotr i Paweł pala papierosy, Ola, Iza i Paweł
czytaja ksia1ki, a Iza, Piotr i Paweł uprawiaja sport.
% Program: przyjaciele
% Definiowane predykaty
% jest/2, lubi/2
% __________________________
% jest/2
% jest(X,Y): spełniony, gdy Y jest prawdziwe dla X
% -------------------------- jest/2
jest(ola,jarosz).
jest(ewa,jarosz).
jest(jan,jarosz).
jest(pawel,jarosz).
jest(iza,pali).
jest(piotr,pali).
jest(pawel,pali).
jest(ola,czyta).
jest(iza,czyta).
jest(pawel,czyta).
jest(iza,sport).
jest(piotr,sport).
jest(pawel,sport).
% -------------------------- jest/2
% lubi/2
% lubi(X,Y): spełniony, gdy X lubi Y
% --------------------------- lubi/2
lubi(ola,X):-X\==ola,jest(X,jarosz),jest(X,sport).
lubi(ewa,X):-X\==ewa,jest(X,jarosz),\+jest(X,pali).
lubi(iza,X):-X\==iza,jest(X,czyta).
lubi(iza,X):=X\==iza,jest(X,sport),\+jest(X,pali).
lubi(jan,X):-X\==jan,jest(X,sport).
lubi(piotr,X):-X\==piotr,jest(X,sport),jest(X,jarosz).
lubi(piotr,X):-X\==piotr,jest(X,czyta).
lubi(pawel,X):=X\==pawel,jest(X,jarosz),jest(sport),jest(czyta).
% --------------------------- lubi/2
ZADANIE 4
Wiadomo, 1e Ewa jest rodzicem Ani, a Piotr jest rodzicem Ewy.
a) Zdefiniuj relacje rodzic/2, a nastepnie korzystajac z tej definicji, relacje
przodek/2
b) narysuj drzewo poszukiwania rozwiazania dla celu:
Kto jest przodkiem Ani?
c) zweryfikuj narysowane drzewo korzystajac z predykatu trace/0.
% Program: Przodek
% Definiowane predykaty:
% rodzic/2, przodek/2
% ____________________________
% rodzic/2
% rodzic(X,Y): spełniony, gdy X jest rodzicem Y
% ------------------------- rodzic/2
rodzic(ewa,ania).
rodzic(piotr,ewa).
% ------------------------- rodzic/2
% przodek/2
% przodek(X,Y): spełniony, gdzy X jest przodkiem Y
% ------------------------- przodek/2
przodek(X,Y):-rodzic(X,Y).
przodek(X,Y):-rodzic(X,Z),przodek(Z,Y).
% ------------------------- przodek/2
*/ sesja prologowa
1 ?- przodek(X,ania).
X = ewa ;
X = piotr ;
false.
/*
ZADANIE 5
Wiadomo, 1e Jan urodził sie w 1974 roku, Ludwik w 1976, Maciej w 1960, a Grzegorz
w 1975.
a) zdefiniuj predykat urodzony/2, a nastepnie korzystajac z tej definicji, predykat
starszy/2
b) narysuj drzewo poszukiwania rozwiazania dla celów:
Czy Jan jest starszy od Macieja?
Kto jest starszy od Jana?
Od kogo Jan jest starszy?
c) zweryfikuj narysowane drzewa korzystajac z predykatu trace/0.
% Program: wiek
% Definiowane predykaty:
% urodzony/2, starszy/2
% _________________________
% urodzony/2
% urodzony(X,Y):- spełniony, gdy X urodził się w roku Y
% ------------------------- urodzony/2
urodzony(jan,1974).
urodzony(ludwik,1976).
urodzony(maciej,1960).
urodzony(grzegorz,1975).
% ------------------------- urodzony/2
% starszy/2
% starszy(X,Y): spełniony, gdy X jest starszy od Y
% ------------------------- starszy/2
starszy(X,Y):-urodzony(X,A),urodzony(Y,B),A<B.
% ------------------------- starszy/2
*/ sesja prologowa
1 ?- starszy(jan,maciej).
false.
2 ?- starszy(X,jan).
X = maciej ;
false.
3 ?- starszy(jan,X).
X = ludwik ;
X = grzegorz.
/*
ZADANIE 6.
Uzgodnic nastepujace listy. W każdym przypadku podac odpowiednie uzasadnienie.
[ala, ma, kota] = [kota, ma, ala].
[1,2,3] = [X,Y].
[1,2,3] = [X|Y].
[1,2,3,osiem] = [1|T].
[1|[2|[3|[osiem]]]] = [1|T].
[1|[2|[3|[osiem]]]] = [X|[osiem]].
[[0,1,2],[3,4],[5]] = [X|Y].
[ala,ma,kota,a,ola,ma,psa] = [ala,ma,kota,a|X].
[alfa(1,2), alfa(3,4), alfa(5,6)] = [alfa(X,2)|T].
1. false, ponieważ są inne stałe
2. false, ponieważ pierwsza lista ma trzy elementy, a druga dwa.
3. X=1, Y=[2,3]
4. T=[2,3,osiem]
5. T=[2,3,osiem]
6. X=[0,1,2], Y=[[3,4],[5]]
7. X=[ola,ma,psa]
8. X=1, T=alfa(3,4),alfa(5,6)]
ZADANIE 7.
Zdefiniowac predykat spr_wzorzec(L, W) spełniony, gdy lista L pasuje do zadanego
wzorca W. Wzorzec jest lista, której elementami moga byc nastepujace stałe:
• n - pasuje do liczby,
• a - pasuje do atomu,
• l - pasuje do elementu bedacego (dowolna) lista,
• . - pasuje do dowolnego elementu,
• * - pasuje do podlisty o dowolnej długosci (tak1e pustej).
Np. wzorzec [n,n] oznacza liste zło1ona z dwóch liczb, zas wzorzec [a,*,n] - liste
zaczynajaca sie atomem i konczaca sie liczba.
Wskazówka: u1yc predykatów wbudowanych atom, number, itp.
Przykład oczekiwanego działania predykatu:
?- spr_wzorzec([15,101,ala,ma,kota,[1,2],a],[n,n,*,l,.]).
True