prolog

1. a. Zbuduj bazę danych opisujących relacje:
a) Jan lubi Marie i czekoladę.

lubi_os(jan,maria).
lubi(jan,czekolada).
b) Piotr lubi wino.
lubi(piotr,wino).
c) Dwie osoby sie lubia, jeżeli maja to samo hobby.
lubi_os(X,Y):-hobby(X,Z),hobby(Y,Z),X\=Y.
d) Turystyka, to hobby Jana i Heleny, a teatr – Tomasza i Piotra.
hobby(jan,turystyka).
hobby(helena,turystyka).
hobby(tomasz,teatr).
hobby(piotr,teatr).
e) Ewa lubi te same rzeczy co Jan oraz osoby, które maja jakies hobby.
lubi(ewa,X):-lubi(jan,X).
lubi_os(ewa,X):-hobby(X,_).
1.b. Sformułuj cele odpowiadające na pytania:
a) Kogo lubi Ewa?

lubi_os(ewa,X).
b) Co lubi Ewa?
lubi(ewa,X).
c) Kto lubi czekolade?
lubi(X,czekolada).
d) Czy ktos lubi Jana?
lubi_os(X,jan).
e) Jakie osoby lubia sie wzajemnie?
lubi_os(X,Y),lubi_os(Y,X).
1.c. Zdefiniuj predykat upodobania/4.

upodobania(X,L1,L2,L3) spełniony, jesli:
X jest osoba ,
L1 jest lista osób, które X lubi lub lista pusta, gdy nie ma takich osób,

L2 jest lista rzeczy, które X lubi lub lista pusta, gdy nie ma takich rzeczy,

L3 jest lista hobby X-a lub lista pusta, gdy X nie ma "adnego hobby.
upodobania(X,[G1|O1],L2,L3):-lubi_os(X,G1).
2. Dany jest nastepujacy program

szef ( ewa, piotr).

szef ( piotr, zenon).

przelozony (X, Y ) :- szef (X,Y ).

przelozony (X, Y ) :- szef (X,Z ), przelozony (Z, Y ).
Sformułuj cel odpowiadajacy na pytanie: kto jest przełożonym Zenona?
przelozony(X,zenon).
3. Zaproponuj definicje relacji

dwa_razy (L1, L2 ),

prawdziwej gdy na liscie L2 składa sie ze zdublowanych elementów listy L1, np. dwa_razy([a,b],[a,a,b,b]).

W definicji predykatu nie korzystaj z predykatów wbudowanych SWI Prologu.

Przy każdej klauzuli podaj komentarz objasniajacy.
dwa_razy([],[]).
dwa_razy([H|T],[H1,H2|T1]) :- H = H1, H = H2, dwa_razy(T,T1).
4. Czy mo"na uzgodnic nast. nastepujace listy? Je"eli tak, wypisz podstawienia zmiennych, je"eli nie, wyjasnij

dlaczego.

Lista 1 Lista 2 Uzgodnienie
[H|[H2|Tail]] [ania,basia,kasia,ola] H=ania, H2=basia, Tail=[kasia,ola]
[Head|Tail] [a,[julia,jest,lekarzem]] Head=a, Tail=[julia,jest,lekarzem]
[a,[x,y,z]] [Glowa,Ogon] Glowa=a, Ogon=[x,y,z]
[X,Y,[a,b,C]] [jablka,gruszki|[D,b,c]]
[G1,G2|Ogon] [1,2,3,4] G1=1, G2=2, Ogon=[3,4]
[lato] [Glowa|Ogon] Głowa=lato, Ogon=[]
[lato] [X,Y,Ogon] Rozna ilosc elementow
[sem4,prolog] [sem4,[Temat]] Temat=[prolog]
[kobieta(ewa), kobieta(jola)] [X|Y] x=kobieta(ewa), Y=kobieta(jola)
[[psy,koty], lubi,marta] [Glowa|[lubi,Y]] Glowa=[psy,koty], Y=marta
[f(g(Y)),a,X] [f(Z),Y,f(Z)] Y = a, 
X = f(g(a)), 
Z = g(a).

5. Korzystajac z wbudowanych predykatów Prologu
a) zdefiniuj predykat operacja1( L1, L2 ) spełniony, gdy lista L2 powstaje z listy L1 przez usuniecie trzeciej

pozycji z tej listy , o ile długosc(L1) >= 3; w przeciwnym przypadku, gdy lista L2 powstaje z L1 przez dodanie

do L1 długosci listy L1 jako ostatniej pozycji na liscie.
operacja1(L1,L2):-length(L1,D),D>=3,select(E,L1,L2),nth1(3,L1,E),!.
operacja1(L1,L2):-L2=[L1|E],E = D,length(L1,D).
b) zdefiniuj predykat operacja2( L1, L2 ) spełniony, gdy dla danej listy L1 zawierajacej wyra"enia

arytmetyczne, L2 jest lista wartosci tych wyrażen.
op(A,B):-B is A.
operacja2(L1,L2):-maplist(op,L1,L2).
c) zdefiniuj predykat operacja3( L1, L2 ) spełniony, gdy dla danej listy L1 zawierajacej wyra"enia

arytmetyczne, L2 jest lista tych wyra"en z L1, których wartosc wynosi 4.
op(A):-B is A,B==4.
operacja3(L1,L2):-sublist(op,L1,L2).
operacja3(L1,L2):-memberchk(E,L1),delete(L1,E,L2),Wart is E, Wart == 4,L1=L2,operacja3(L1,L2).
6. Dany jest nastepujacy program:

dlugosc(10).

dlugosc(20).

szerokosc(1).

szerokosc(2).

wysokosc(5).

wysokosc(6).

objetosc(X):- dlugosc(A),

szerokosc(B),

wysokosc(C),

X is A*B*C.
Podac liczbe rozwiazan dla celu ?- objetosc(X).

Zmodyfikuj procedure objetosc przy pomocy odciecia (nie usuwajac "adnego faktu z bazy), aby przy realizacji celu ?- objetosc(X) uzyskac.

dlugosc(10).
dlugosc(20).
szerokosc(1).
szerokosc(2).
wysokosc(5).
wysokosc(6).
objetosc(X):- dlugosc(A),szerokosc(B),wysokosc(C),X is A*B*C.
a) jedna
dlugosc(10).
dlugosc(20).
szerokosc(1).
szerokosc(2).
wysokosc(5).
wysokosc(6).
objetosc(X):- dlugosc(A),szerokosc(B),wysokosc(C),X is A*B*C,!.
b) dwie,
dlugosc(10).
dlugosc(20).
szerokosc(1).
szerokosc(2).
wysokosc(5).
wysokosc(6).
objetosc(X):- dlugosc(A),szerokosc(B),!,wysokosc(C),X is A*B*C.
c) cztery,
dlugosc(10).
dlugosc(20).
szerokosc(1).
szerokosc(2).
wysokosc(5).
wysokosc(6).
objetosc(X):- dlugosc(A),!,szerokosc(B),wysokosc(C),X is A*B*C.
d) osiem odpowiedzi
dlugosc(10).
dlugosc(20).
szerokosc(1).
szerokosc(2).
wysokosc(5).
wysokosc(6).
objetosc(X):- !,dlugosc(A),szerokosc(B),wysokosc(C),X is A*B*C.


Wyszukiwarka

Podobne podstrony:
prolog
Prolog Programowanie W F Clocksin C S Mellish
Przedmowa Prolog
prolog
Prolog Listy
Prolog
Prolog (3)
prolog
prolog, PROGRAMOWANIE DEKLARATYWNE, PROGRAMOWANIE DEKLARATYWNE, ZADANIA
1-2 lab, Laboratorium 1, Laboratorium 1 - Prolog
prologo
Broken Heart Od Prologu do Rozdziału 24
prolog zadania rozne
Prolog, Tłumaczenia, Trwające, Kailin Gow
prolog PZR6SZ3J3UV6LTM2KP7UMCZIPZGUR77BGTIBNTA
Czarna biblia 2.PROLOG
Prolog w 33 minuty
Prolog
Prolog
PD W2 Wstep do j Prolog(2010 11 05) 1 1

więcej podobnych podstron