Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licență

FISA DISCIPLINEI

Codul
Denumirea disciplinei
MID0005 Programare logică şi funcţională
Specializarea
Semestrul
Ore: C+S+L
Categoria
Statutul
Informatică
3
2+0+1
specialitate
obligatorie
Ingineria informatiei
3
2+0+1
specialitate
obligatorie
Titularii de disciplina
Prof. Dr. POP Horia Florin,  hfpopcs.ubbcluj.ro
Conf. Dr. CZIBULA Gabriela,  gabiscs.ubbcluj.ro
Conf. Dr. CSATO Lehel,  csatolcs.ubbcluj.ro
Lect. EGRI Edith,  egrieditcs.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
Continutul
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: 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 .
Legaturi: Syllabus-urile tuturor disciplinelor
Versiunea in limba engleza a acestei discipline
Versiunea in format rtf a acestei discipline