Seminar Ski Rad - Liste

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 5

Tehniki fakultet Mihajlo Pupin, Zrenjanin Student: Stefan Radi Broj indeksa: 54/08-11 Smer: Inenjer informatike

SEMINARSKI RAD
Sistemi vestacke inteligencije - Liste

Profesor: Vladimir Brtka Asistent: Vinja Ognjenovi Zrenjanin, Maj 2011.

Liste
Do sada smo samo jednostavne stvari smatrali kao argumente za nae programe. Ipak u Prologu veoma vana struktura podataka je Lista. Listu mozemo shvatiti kao binarnu strukturu, ali eksplicitnim pretstavljanjem liste kao binarne strukture lista brzo postaje nepregledna. Zato je u prologu uvedena posebna notacija za tu strukturu. Prema toj notaciji listu pretstavljamo navoenjem njenih elemenata zatvorenih u uglaste zagrade. Liste uvek poinju i zavravaju se sa uglastim zagradama, i svaki element kojeg sadre je odvojen zarezom. Elementi liste mogu biti razliitog tipa (atomi, brojevi, promenljive...). Lista isto moze da sadri i vie jednakih elemenata. Evo primera jednostavne liste: [a, sedam, A_Promenljiva, jabuka] Prolog ima i posebnu mogunost da odvoji prvi deo liste od ostatka liste. Taj deo se zove glava liste, a ostali deo rep liste. Moemo postaviti izmeu specijalni simbol | (bar), da bi znali ta je prvi deo liste, a ta ostali deo. Na primer razmotrimo sledee: [prvi, drugi, trei] = [A | B] A = prvi B = [drugi, trei] Ujedinjenje ovde uspeva. A pripada prvom delu liste, a B ostatku liste. Primeri listi Primeri jednostavnih listi [a, b, c, d, e, f, g] [jabuka, kajsija, banane, naranda] [ ] /* ovo je specijalna lista, zove se prazna lista jer ne sadri nita */ [a] /* lista sa jednim elementom */ [a|X] /* lista sa glavom a i repom X * / (X je promenljiva koja predstavlja listu koja ini preostali deo liste [a|X]. Ako je data lista [a, b, c, d], koja se pri radu programa objedinjuje sa [a|X], tada se X objedinjuje sa [b, c, d])

Sada emo razmotriti nekoliko poreenja listi: [a, b, c] se objedinjuje sa [Glava|Rep] pri emu se dobija da je Glava = a i Rep = [b, c] [a] se objedinjuje sa [H|T] pri emu se dobija da je H = a i T = [ ] [a, b, c] se objedinjuje sa [a|T] pri emu se dobija da je T = [b, c] [a, b, c] se ne objedinjuje sa [b|T] [ ] se ne objedinjuje sa [H|T] [ ] se objedinjuje sa [ ] Dve prazne liste se uvek odgovaraju. Razmotriti sledee injenice p([H|T], H, T) Pogledajmo ta se deava kada zadamo nekoliko jednostavnih upita. ?- p([a, b, c], X, Y). X=a Y=[b, c] yes ?- p([a], X, Y). X=a Y=[ ] yes ?- p([3, 4], X, Y). X=3 Y=4 Yes ?- p([ ], X, Y). no Veba

Sada emo prestaviti nekoliko problema kada objedinjenje listi nekad uspe, a nekad ne uspe. Treba odluiti u kom sluaju objedinjenje uspeva, a u kom ne uspeva. 1. [a, d, z, c] i [H|T] 2. [jabuka, kajsija, naranda] i [J, kajsija|Ostalo] 3. [a|Ostalo] i [a, b, c] 4. [a, [ ]] i [A, B|Ostalo] 5. [Jedan] i [dva|[ ]] 6. [jedan] i [Dva] 7. [a, b, X] i [a, b, c, d] Reenje 1. Yes H = a i T = [d, z, c] 2. Yes J = jabuka i Ostalo = [naranda] 3. Yes Ostalo = [b, c] 4. Yes A = a, B = [ ] i Ostalo = [ ] 5. Yes Jedan = dva 6. Yes Dva = jedan 7. No X ne moe predstavljati c,d Veliki broj problema koji zahteva upotrebu sloenijih struktura podataka reava se svoenjem na elementarne predikate za rad sa listama. Primer: lan liste Napisati prolog program za odreivanje da li je dati element lan liste. clan(X,[X|_]). clan(X,[_|Y]) :- clan(X,Y). Poziva se sa clan(element, lista).

Test primer: ?- clan(3, [2, 4, 3, 1]). yes ?- clan(4, [1, 3, 5, 2]. no ?- clan(X, [2, 3, 4, 1] X = 2 ->; X = 3 ->; X = 4 ->; X = 1 ->; no Napisati prolog predikate za sledee probleme: 1. Poslednji element liste 2. N-ti element liste 3. Ukupan broj elemenata liste duina liste Reenje 1. Poslednji element liste poslednji([X], X). poslednji([H|T], R):-poslednji(T, R). 2. N-ti element liste nti([H|T], 1, H). nti([H|T], N, R):-N1 is N-1, nti(T, N1, R). 3. Duina liste duzina([], 0). duzina([H|T], N1):-duzina(T, N), N1 is N+1.

You might also like