Person in charge:  () 
Others:  () 
Credits  Dept. 

7.5 (6.0 ECTS)  CS 
Person in charge:  () 
Others:  () 
The aims of this subject are the following:
 For students to absorb the concepts needed in order to analyse a programming language, according to the underlying model (different classes or paradigms), its fundamental components (types system, execution model, data and process abstraction), its appropriateness for the type of application, its scope, and its development methodology.
 For students to gain an understanding of the basic theory underlying programming languages and their formal definition, especially the foundations of the functional paradigm.
 For students to acquire basic programming experience in functional languages such as Miranda or Haskell.
Estimated time (hours):
T  P  L  Alt  Ext. L  Stu  A. time 
Theory  Problems  Laboratory  Other activities  External Laboratory  Study  Additional time 

T  P  L  Alt  Ext. L  Stu  A. time  Total  

6,0  13,0  14,0  0  14,0  19,0  0  66,0  
Components of a functional programming system. Evolution of the paradigm. Characteristics of current functional languages:
Intensive use of the higher order. "Currying" (SchönfinkelFrege technique). Equation definition by patterns. Algebraic types and abstract types. Polymorphism. Deduction of types. Lazy evaluation. Higher order programming techniques in a functional language with lazy evaluation (Miranda or Haskell). Programming with infinite objects. Network solutions for streams. Comprehensionbased list definition (generator/filter scheme).


T  P  L  Alt  Ext. L  Stu  A. time  Total  

5,0  5,0  0  0  0  15,0  0  25,0  
Lambda Calculus. Reduction strategies. Normal and applied order. The problem posed by recursive definitions.
Introduction to Domain Theory. Fixed Point Theorem. Introduction to type theory. Typebased inference systems. 

T  P  L  Alt  Ext. L  Stu  A. time  Total  

5,0  5,0  0  0  0  15,0  0  25,0  
Sintactic elements. Concrete and abstract syntax. The various semantic approaches and their application. The denotational approach.
Semantic definition of a minimalist imperative language. The semantic equivalence of programmes. Semantics of other classes of languages. 

T  P  L  Alt  Ext. L  Stu  A. time  Total  

9,0  3,0  0  0  0  7,0  0  19,0  
 The type system. Evolution of the concept of type. Type definition mechanisms. Algebraic types. Genericity and polymorphism.
Parametric polymorphism and inclusion polymorphism. Subtypes and subclasses. Forms of inheritance. Hierarchies. Type checking  static typing and dynamic typing. Type interference  Sequence control. At the expression level. In instructions. Between programme units. Procedures. Coroutines. Concurrent processes. Exception management tools. Sequence control of paradigms.  Data control. Associations between identifiers and objects. Overload. Aliasing. Static and dynamic resolution of links. Scope and visibility. Data sharing. Parameterpassing methods. 
Total per kind  T  P  L  Alt  Ext. L  Stu  A. time  Total 
28,0  28,0  14,0  0  14,0  59,0  0  143,0  
Avaluation additional hours  7,0  
Total work hours for student  150,0 
There will be theory classes and problems (4 hours a week, on average), and lab classes (1 hour a week, on average).
Lab classes will be spent on exercises dealt with in the classes problem sessions, and a practical piece of work tackled by students who will ideally work in groups of three.
There will be two exams and a compulsory practical session, carrying 15% of total marks.
Students attaining a grade of 4 or above will be exempted from the corresponding part of the final exam.
In this case, the final grade will be calculated as the weighted average of the three grades,
in which the part exam will make up 40% of the final grade, and the final exam 45%.
If the grade for the part exam is less than 4, the final exam will include both parts of the course and will carry a weight of 85%.
Students must have passed the Prap course.