You are on page 1of 3

Micha Zawilak, III rok IB, grupa GL03

Sprawozdanie z wiczenia nr 3
Temat: Proceduralne aspekty Prologa, instrukcje wpywajce na kolejno
przeszukiwa bazy wiedzy. Operacje matematyczne.

Kod programu 1:
a(1).
a(2).
b(3).
b(4).
b(2).
b(4).
c(1).
c(2).
c(3).
c(5).
c(6).
w(X):-a(X),b(X).
w(X):-c(X).
list(X,C):-findall(X,w(X),C).
dlugosc([],0).
dlugosc([_|O],Dlug):- dlugosc(O,Z), Dlug is Z+1.

Wynik:

?- list(X,C),dlugosc(C,Y).
C = [2, 1, 2, 3, 5, 6],
Y = 6.

Kod programu 2:
dot(1).
dot(2).
dot(3).
dot(4).
dot(5).
dot(6).
rzut(_,_,_,Szukana):-Szukana<3,!,fail.
rzut(_,_,_,Szukana):-Szukana>18,!,fail.
rzut(K1,K2,K3,Szukana):-dot(K1),dot(K2),dot(K3),
Szukana =:= K1+K2+K3,
write(K1),
write(" "),
write(K2),
write(" "),
writeln(K3).

Wynik:

?- rzut(K1,K2,K3,10),fail.
136
145
154
163
226
235
244
253
262
316
3 2 5

Kod programu 3:
dzielenie(_,L2,_):- L2==0,!,fail.
dzielenie(L1,L2,Wynik):- Wynik is L1/L2,
write("Wynik dzielenia "),
write(L1), write(" przez "),
write(L2), write(" wynosi "),
writeln(Wynik).

Wynik:

?- dzielenie(4,2,X).
Wynik dzielenia 4 przez 2 wynosi 2
X = 2.

Kod programu 4:
dzielenie(_,L2,_):- L2==0,!,fail.
dzielenie(L1,L2,Wynik):-var(Wynik), Wynik is L1/L2.
dzielenie(L1,L2,Wynik):-var(L1), L1 is Wynik*L2.
dzielenie(L1,L2,Wynik):-var(L2), L2 is L1/Wynik.

Wynik:

?- dzielenie(X,2,5).
X = 10.
?- dzielenie(10,X,5).
X = 2.
?- dzielenie(10,2,X).
X=5.

Wnioski
Prolog jest jednym z najpopularniejszych jzykw programowania logicznego,
ktrego jedn z cech jest automatyczne nawracanie, dziki zastosowaniu
predykatu cut (!). W wiczeniu zbadaem wpyw odcicia (!) na liczb
rozwiza, w zalenoci od pooenia odcicia, kolejnoci faktw oraz
kolejnoci regu oraz stworzyem predykat ktry pokazuj list rozwiza i
dugo tej listy. Nastpnie wykorzystaem predykat fail sucy do wymuszania
nawrotw(wyszukuje on kolejne rozwizanie), by uzyska wszystkie moliwe
kombinacje rzutw trzema kostkami. Sprawdziem rwnie przypadek
poczenia fail z predykatem odcicia. Korzystajc z kombinacji predykatw
!,fail napisaem program dzielenia dwch liczb reagujcy na prb dzielenia
przez zero zakoczeniem oblicze i powtarzajcym obliczenia dla niezerowej
wartoci dzielnika.

You might also like