Universitatea "Babes-Bolyai" Cluj-Napoca
Facultatea de Matematica si Informatica
FISA DISCIPLINEI

Programare logica şi funcţionala
Cod
Semes-
trul
Ore: C+S+L
Tipul
Specializarea
MI035
6
2+0+1
optionala
Matematică-Informatică
Cadre didactice indrumatoare
Prof. Dr. POP Horia Florin,  hfpopcs.ubbcluj.ro
Conf. Dr. SERBAN Gabriela,  gabiscs.ubbcluj.ro
Conf. Dr. SOOS Anna,  asoosmath.ubbcluj.ro
Asist. MIHAILA Cristina Aneta,  anetacs.ubbcluj.ro
Obiective
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
Continut
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.

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
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%). Participarea la examenul scris este conditionata de notele NL si NT, care trebuie sa fie cel putin 5.
Se acorda punctaj in plus pentru realizarea unui proiect optional. Pentru promovare, NE si nota finala trebuie sa fie >=5.
Legaturi: Syllabus-urile tuturor disciplinelor
Versiunea in limba engleza a acestei discipline
Versiunea in format rtf a acestei discipline