Universitatea "Babeş-Bolyai" din Cluj-Napoca

Facultatea de Matematică şi Informatică
FISA DISCIPLINEI

Programare logica şi funcţionala Functional programming and logic programming
Cod
Semes-
trul
Ore: C+S+L
Credite
Tipul
Sectia
MI035
6
2+0+1
5
optionala
Matematică-Informatică
(Mathematics-Computer Science)
MI035
4
2+0+1
5
optionala
Informatică
(Computer Science)
Cadre didactice indrumatoare Teaching Staff in Charge
Conf. Dr. POP Horia, hfpop@cs.ubbcluj.ro
Lect. Dr. BALÁZS Marton, mebalazs@cs.ubbcluj.ro
Obiective Aims
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
1. To get the student acustomed with new programming paradigms (functional and logic programming)
2. To introduce a programming language for each of these paradigms (Common Lisp and Prolog)
3. To induce the idea of using these programming paradigmsbased on the applications' mecessities
4. To assure the necessary base for aproaching certainadvanced courses
Continut
1. Programare Functionala. Limbajul LISP
1.1. 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. Predicate de baza in Lisp. Predicate pentru liste; pentru numere. Functii logice. 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
2. Programare Logica. Limbajul PROLOG.
2.1. Elemente fundamentale ale limbajului Prolog. Fapte si reguli Prolog. Intrebari. 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. Intrebari interne si externe. Predicate cu aritate multipla. Simbolul if (Prolog) si instructiunea if (alte limbaje). Directive de compilare. Aritmetica 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. Exemple de tratare a backtracking-ului. Gasirea tuturor solutiilor On acelasi timp. Exemple de predicate Prolog.
2.4. Obiecte compuse si functori. Unificarea obiectelor compuse. Argumente de tipuri multiple; liste heterogene. Compararea obiectelor compuse. Repetitie si recursivitate. Backtracking cu ciclari. Exemple de proceduri recursive. Cadrul stivei. Optimizarea prin recursivitate de coada. Utilizarea taieturii pentru recursivitatea de coada.
2.5. Structuri de date recursive. Arborii ca structuri de date. Construirea si traversarea unui arbore. Arbori de cautare binara. Baza de date interna a sistemului Prolog. Sectiunile predicates si database. Declararea b.d.i. Predicate relativ la operatii cu b.d.i.
3. Topici diverse.
3.1. Alte limbaje functionale si logice. Limbajul APL. Versiuni de Lisp. Versiuni de Prolog.
3.2. Exemple de aplicatii. Programe prezentate comparativ in Lisp, Prolog si limbaje imperative.
Bibliografie
1. A. Field, Functional Programming, Addison Wesley, 1988.
2. C. Giumale et. al., LISP, 2 Volume, Editura Tehnica, 1987.
3. C. J. Hogger, Introduction to Logic Programming, Academic Press, 1984.
4. S. E. Kleene, Object Oriented Programming in Common Lisp, Addison Wesley, 1989.
5. B. Parv, Alexandru Vancea, Fundamentele limbajelor de programare, Litografia Universitatii "Babes-Bolyai" Cluj-Napoca, 1992.
6. H. F. Pop, Programare Functionala si Logica, Liotgrafia Universitatii "Babes-Bolyai", 1998.
7. C. Reede, Elements of Functional Programming, Addison Wesley, 1989.
8. I. Streinu, LISP, Editura Stiintifica si Enciclopedica, 1986.
9. A. Walker et. al., Knowledge Systems and Prolog. A Logical Approach to Expert Systems and Natural Processing, Addison Wesley, 1987.
10. P. H. Winston, Lisp, Addison Wesley, 1984, 2nd edition.
11. Patrick Henry Winston, Artificial Intelligence, Addison Wesley, 1984, 2nd edition.
12. Documentatia produselor: Gold Common Lisp 1.01 si 4.30,XLisp, Free Lisp.
13. Documentatia produselor: Turbo Prolog 2.0, Logic Explorer, Sicstus Prolog.
Evaluare Assessment
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; activitatea de la laborator; intarzierea in predarea lucrarilor de laborator; absentele de la activitatea de laborator.
Each student has to prove that (s)he aquired an acceptable level of knowledge and understanding of the subject, that (s)he is capable of stating these knowledge in a coherent form, that (s)he has the ability to establish certain connexions and to use the knowledge in solving different problems. The final grade will be based on the following components: written paper; laboratory activity; lateness in handing the laboratory assignments; missing laboratory activities.