020FPRES3

Functional Programming

The goal of this course is to introduce the functional programming paradigm using, mainly, the Java programming language. It also illustrates some functional programming concepts in Python and introduces Scala as mutli-paradigm hybrid programming language. The course begins with an overview of functional programming followed by a gradual exposition of the evaluation model (used to reason about functional programs) alongside the explanation of the following concepts: recursion and the optimization of recursive functions, the use of functions as values, the partial application of functions, object immutability and its advantages, types and pattern matching, pairs and tuples, lists and functional collections, combinatorial search problem solving using for-expressions, lazy evaluation, functional streams, infinite sequences, the variance of polymorphism with regards to inheritance and a brief of overview of key monad such as Option, Try and Future. These concepts will be illustrated by examples and exercises in Java, Python and Scala. Finally, the course will end with an introduction to program proving using structural induction.


Temps présentiel : 30 heures


Charge de travail étudiant : 70 heures


Méthode(s) d'évaluation : Examen final, Examen partiel, Travail personnel

Les prérequis de ce cours sont les suivants
 Object-Oriented Programming
Programmation Orientée Objets
Ce cours est proposé dans les diplômes suivants
 Licence en informatique
Diplôme d'ingénieur - spécialité génie informatique et communications - option : génie logiciel
Diplôme d'ingénieur - spécialité génie informatique et communications - option : réseaux de télécommunications