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+P	Categoria	Statutul	
3	2+0+1+0	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 Functionala. Limbajul LISP
  1.1. Programare si limbaje de programare. Programare imperativa vs. programare declarativa. Introducere. Importanta programarii functionale ca noua metodologie de programare. Istoric si prezentare a limbajului LISP.
  1.2. Elemente de baza Lisp. Structuri dinamice de date. Reguli sintactice si semantice. Clasificarea functiilor Lisp. Functii primitive în Lisp. Predicate de baza în Lisp. Predicate pentru liste; pentru numere. Functii logice si aritmetice. Definirea functiilor utilizator. Ramificarea prelucrarilor. Metoda variabilei colectoare. Exemple.
  1.3. Gestiunea simbolurilor. Alte functii de acces la liste. OBLIST si ALIST. Functii cu caracter destructiv. Comparatii. Alte functii interesante. Exemple.
  1.4. Mecanisme definitionale evoluate Forma EVAL. Forme functionale; functiile  FUNCALL si APPLY.  Expresii LAMBDA. Expresii LABEL. Generatori, argumente functionale. Functii MAP. Forme iterative. Exemple.
  1.5. Alte elemente ale limbajului Lisp. Structuri de date. Macrodefinitii. Argumente optionale. Exemple.

2. Programare Logica. Limbajul PROLOG
  2.1. Elemente fundamentale ale limbajului Prolog. Fapte si reguli Prolog. Intrebari. Strategia de control în Prolog. Variabile si propozitii  compuse. Variabile anonime. Reguli de definire a potrivirilor. Model de flux. Sectiunile unui program Prolog. Exemple.
  2.2. Programul Prolog. Domenii predefinite. Întrebari interne si externe. Predicate  cu aritate multipla. Simbolul IF (Prolog) si instructiunea IF (alte limbaje). Directive de compilare. Expresii aritmetice si comparatii. Operatii de intrare / iesire. siruri de caractere. 
  2.3. Backtracking. Controlarea backtracking-ului. Predicatele fail si ! (cut).  Utilizarea lui !. Tipuri de taieturi. Predicatul "not". Liste Prolog. Recursivitate. Exemple de tratare a backtracking-ului. Gasirea tuturor solutiilor în acelasi timp. Exemple de predicate Prolog. Predicate nedeterministe. 
  2.4. Obiecte compuse si functori. Unificarea obiectelor compuse. Argumente de tipuri multiple; liste eterogene. Compararea obiectelor compuse. Backtracking cu ciclari. Exemple de proceduri  recursive. Cadrul stivei. Optimizarea prin recursivitate de coada. Utilizarea taieturii pentru pastrarea recursivitatii de coada.
  2.5. Structuri de date recursive. Arborii ca structuri de date. Construirea si traversarea unui  arbore. Arbori de cautare. Baza de date interna a sistemului Prolog. Sectiunea database. Declararea bazei de date interne. Predicate relativ la operatii cu baza de date interna. 
  2.6. Backtracking in Prolog. 
  2.7. Gestiunea fisierelor în PROLOG. Elemente de grafica.

3. Topici diverse
  3.1. Alte limbaje functionale si logice. Versiuni de LISP. Versiuni de PROLOG.
  3.2. Exemple de aplicatii. Programe prezentate comparativ în Lisp, Prolog si limbaje imperative. Aplicatii specifice. 

V. Bibliografie
1. SERBAN G., POP H.F., Elemente avansate de programare in Lisp si Prolog. Aplicatii in Inteligenta Artificiala, Editura Albastra, Cluj-Napoca, 2006
2. FIELD A., Functional Programming, Addison Wesley, New York, 1988.
3. GIUMALE G., et. al., LISP, 2 Volume, Editura Tehnica, Bucuresti, 1987.
4. HOGER C.J., Introduction to Logic Programming, Academic Press, New York, 1984.
5. KLEENE S.E., Object Oriented Programming in Common Lisp, Addison Wesley, New York, 1989.
6. PARV B., VANCEA Al., Fundamentele limbajelor de programare, Litografia Universitatii Babes-Bolyai Cluj-Napoca, 1992.
7. REEDE C., Elements of Functional Programming, Addison Wesley, New York, 1989.
8. STREINU I., Lisp, Editura Stiintifica si Enciclopedica, Bucuresti, 1986.
9. WALKER A., et. al., Knowledge Systems and Prolog. A Logical Approach to Expert Systems and Natural Processing, Addison Wesley, New York, 1987.
10. WINSTON P.H., Lisp, Addison Wesley, New York, 2nd edition, 1984.
11. WINSTON P.H., Artificial Intelligence, Addison Wesley, New York, 2nd edition, 1984.
12. FLACH P., Simply Logical Intelligent reasoning by Example, John Wiley & Sons, Chichester, England, 1994
13. * * *, Documentatia produselor: Gold Common Lisp 1.01 si 4.30,XLisp, Free Lisp.
14. * * *, Documentatia produselor: Turbo Prolog 2.0, Logic Explorer, Sicstus Prolog.
15. http://www.ifcomputer.com/PrologCourse, Lecture on Prolog
16. http://www.lpa.co.uk, Logic Programming	

VI. Tematica activităţilor didactice pe săptămâni

VII. Metode didactice folosite

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: lucrare scrisa de Programare Functionala (30 p); lucrare scrisa de Programare Logica (30 p), activitatea de laborator, documentatii si programe (20 p) (10 probleme de laborator; intarziere in predarea temelor; absente de la laborator; documentatii si programe) test practic de Lisp si Prolog (20 p), proiect (20 p). Nota se calculeaza considerand un maxim de 100p. Nota finala se calculeaza doar daca se obtin cel putin 12 puncte la fiecare lucrare scrisa si daca se predau cel putin cinci probleme de laborator din 10; altfel, disciplina este picata. 

Pagina oficiala a cursului predat in limba engleza este http://www.cs.ubbcluj.ro/~hfpop/pfl . Pagina oficiala a cursului predat in limba romana este http://www.cs.ubbcluj.ro/~gabis/plf .

IX. Bibliografie suplimentară

	Decan,							Sef de catedra,

	Data,							Titular curs,
								Conf. Dr.  CZIBULA Gabriela