Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Informatică
Programul de studii: Informatică - linia de studiu română
Limba de predare: Română

SYLLABUS

I. Date generale
Codul	Disciplina	
MID0005	Programare logică şi funcţională	

Semestrul	Ore: C+S+L	Categoria	Statutul	
3	2+0+1	specialitate	obligatorie	

II. Cadre didactice cu norma de bază în Universitate
Numele şi	Titlul	Gradul	Catedra	Tipul activităţii	
prenumele	ştiinţific	didactic		C	S	L	
CZIBULA Gabriela	Dr.	Conf.	Limbaje şi Metode de Programare	*			

Cadre didactice asociate
Numele şi	Titlul	Instituţia	Tipul	Tipul activităţii	
prenumele	ştiinţific		postului	C	S	L	

III. Obiectivele disciplinei
1. Sa deprinda studentul cu noi paradigme de programare (programarea functionala si programarea logica)
2. Sa introduca cate un limbaj de programare pentru fiecare din aceste paradigme (Common Lisp si Prolog)
3. Sa induca ideea utilizarii acestor paradigme in functie de necesitatile aplicatiilor
4. Sa asigure baza necesara urmaririi unor cursuri avansate	

IV. Conţinutul disciplinei
1.	Programare Funcţională. Limbajul LISP
2.	Programare Logică. Limbajul PROLOG
3.	Topici diverse	

V. Bibliografie
1.	SERBAN G., POP H.F., Elemente avansate de programare in Lisp si Prolog. Aplicatii in Inteligenta Artificiala, Editura Albastra, Cluj-Napoca, 2004 
2.	POP H.F., SERBAN G., Programare in Inteligenta Artificiala - Lisp si Prolog, Editura Albastra, Cluj-Napoca, 2003 
3.	* * *, Documentatia produselor: Gold Common Lisp 1.01 si 4.30, XLisp, Free Lisp. 
4.	 * * *, Documentatia produselor: Turbo Prolog 2.0, Logic Explorer, Sicstus Prolog. 
5.	http://www.ifcomputer.com/PrologCourse, Lecture on Prolog 
6.	http://www.lpa.co.uk, Logic Programming	

VI. Tematica activităţilor didactice pe săptămâni
1.	Programare Funcţională. Limbajul LISP
1.1.	Programare şi limbaje de programare. Programare imperativa vs. programare declarativă. Introducere. Importanţa programării funcţionale ca noua metodologie de programare. Istoric şi prezentare a limbajului LISP. [1, ch. 1, 2] (1 curs – S1 + 1 laborator – S3 / S4)
1.2.	Elemente de bază Lisp. Structuri dinamice de date. Reguli sintactice şi semantice. Clasificarea funcţiilor Lisp. Funcţii primitive în Lisp. Predicate de bază în Lisp. Predicate pentru liste; pentru numere. Funcţii logice şi aritmetice. Definirea funcţiilor utilizator. Ramificarea prelucrărilor. Metoda variabilei colectoare. Exemple. [1, ch. 3, 4] (1 curs – S2 + 1 laborator – S5 / S6)
1.3.	Gestiunea simbolurilor. Alte funcţii de acces la liste. OBLIST si ALIST. Funcţii cu caracter destructiv. Comparaţii. Alte funcţii interesante. Exemple. [1, ch. 3] (2 cursuri – S3, S4)
1.4.	Mecanisme definiţionale evoluate Forma EVAL. Forme funcţionale; funcţiile  FUNCALL si APPLY.  Expresii LAMBDA. Expresii LABEL. Generatori, argumente funcţionale. Funcţii MAP. Forme iterative. Exemple. [1, ch. 6, 7] (2 cursuri – S5, S6 + 1 laborator – S7 / S8)
1.5.	Alte elemente ale limbajului Lisp. Structuri de date. Macrodefiniţii. Argumente opţionale. Exemple. [1, ch. 8, 10] (1 curs – S7)

2.	Programare Logică. Limbajul PROLOG
2.1.	Elemente fundamentale ale limbajului Prolog. Fapte şi reguli Prolog. Intrebări. Strategia de control în Prolog. Variabile şi propoziţii  compuse. Variabile anonime. Reguli de definire a potrivirilor. Model de flux. Secţiunile unui program Prolog. Exemple. [1, ch. 11] (1 curs – S8 + 1 laborator – S11 / S12)
2.2.	Programul Prolog. Domenii predefinite. Întrebări interne şi externe. Predicate  cu aritate multiplă. Simbolul IF (Prolog) şi instructiunea IF (alte limbaje). Directive de compilare. Expresii aritmetice şi comparaţii. Operaţii de intrare / ieşire. Şiruri de caractere. [1, ch. 12, 13] (1 curs – S9)
2.3.	Backtracking. Controlarea backtracking-ului. Predicatele fail şi ! (cut).  Utilizarea lui !. Tipuri de tăieturi. Predicatul “not”. Liste Prolog. Recursivitate. Exemple de tratare a backtracking-ului. Găsirea tuturor soluţiilor în acelaşi timp. Exemple de predicate Prolog. Predicate nedeterministe. [1, ch. 14, 15] (1 curs – S10 + 1 laborator – S13 / S14)
2.4.	Obiecte compuse si functori. Unificarea obiectelor compuse. Argumente de tipuri multiple; liste eterogene. Compararea obiectelor compuse. Backtracking cu ciclări. Exemple de proceduri  recursive. Cadrul stivei. Optimizarea prin recursivitate de coadă. Utilizarea tăieturii pentru păstrarea recursivităţii de coadă. [1, ch. 16] (1 curs – S11)
2.5.	Structuri de date recursive. Arborii ca structuri de date. Construirea si traversarea unui  arbore. Arbori de căutare. Baza de date internă a sistemului Prolog. Secţiunea database. Declararea bazei de date interne. Predicate relativ la operaţii cu baza de date internă.. [1, ch. 16, 17] (1 curs – S12, S13)
2.6.	Gestiunea fişierelor în PROLOG. Elemente de grafică. [1, ch. 18]

3.	Topici diverse (1 curs - S14)
3.1.	Alte limbaje funcţionale şi logice. Versiuni de LISP. Versiuni de PROLOG. [1, ch. 19, 20]
3.2.	Exemple de aplicaţii. Programe prezentate comparativ în Lisp, Prolog şi limbaje imperative. Aplicaţii specifice. [5], [6]

VII. Metode didactice folosite
Prelegeri, expuneri, conversatii, exercitii, studiu individual.	

VIII. Evaluare
Fiecare student trebuie sa demonstreze ca a atins un nivel acceptabil de cunoastere si intelegere a domeniului, ca este capabil sa exprime cunostintele intr-o forma coerenta, ca are capacitatea de a stabili anumite conexiuni si de a utiliza cunostintele in rezolvarea unor probleme. Nota finala va fi compusa luand in calcul urmatoarele componente: lucrarea scrisa (NE - 60%); activitatea de laborator(NA - 10%) (intarzierea in predarea lucrarilor de laborator; absentele de la activitatea de laborator); nota pe documentatiile si programele realizate in timpul activitatii de laborator (NL - 10%); doua teste practice de laborator in timpul semestrului(NT - 10%+10%). Se acorda punctaj in plus pentru realizarea unui proiect optional. Participarea la examenul scris este conditionata de notele NL si NT, care trebuie sa fie cel putin 5. Pentru promovare, NE si nota finala trebuie sa fie >=5. Mai multe detalii legate de evaluarea activitatii se gasesc la http://www.cs.ubbcluj.ro/~gabis/Req_PLF.htm.	

IX. Bibliografie suplimentară
1.	FIELD A., Functional Programming, Addison Wesley, New York, 1988. 
2.	GIUMALE G., et. al., LISP, 2 Volume, Editura Tehnica, Bucuresti, 1987. 
3.	PARV B., Alexandru Vancea, Fundamentele limbajelor de programare, Litografia Universitatii Babes-Bolyai Cluj-Napoca, 1992. 
4.	WINSTON P.H., Lisp, Addison Wesley, New York, 2nd edition, 1984. 
5.	WINSTON P.H., Artificial Intelligence, Addison Wesley, New York, 2nd edition, 1984. 
6.	* * *, http://www.swi-prolog.org/
7.	* * *, http://www.dreamsongs.com/CLOS.html
8.	* * *, http://www.trinc-prolog.com/
9.	* * *, http://www.aiai.ed.ac.uk/~jeff/clos-guide.html	

	Data,							Titular curs,
	11.03.2009						Conf. Dr. CZIBULA Gabriela