Formation programmation fonctionnelle Yann « Yago » Hamdaoui - VIA - IRIF 6 avril 2016 1 La programmation fonctionnelle ? 1.1 Qu’est-ce que la programmation fonctionnelle ? — Une classe de langages où les fonctions sont des « first class citizens » (higher order functions) — Une classe de langages basés sur le λ-calcul — Exemples de langages fonctionnels : Lisp, OCaml, Haskell 1.2 Qu’est ce qu’un calcul ? — Calcul : des grandeurs et des opérations sur ces grandeurs — Machine de Turing ; Modèle Turing-complet ; Notion de calculabilité — Ensembles classiques de systèmes Turing-complets : la plupart des langages de programmation, les fonctions récursives, jeux de la vie, Minecraft, configuration Sendmail. . . — Architecture de Von Neumann L’avènement du λ 1.3 — — — — 2 Soit ν = {x, y, . . .} un ensemble de variables, on définit M, N := x|λx, M |M N Notion d’application partielle Notion de β-réduction Le λ-calcul est Turing-complet. Les systèmes de types — « Well-typed programs do not go wrong. » Robin Milner — Système de type simple — Type, types algébriques (type-produit, type-somme) 3 ML 3.1 Un petit fix — Récursivité, point fixe — Polymorphisme : on remplace les types sur lesquels on n’a pas de contrainte par des α — Types récursifs : listes, arbres. . . 3.2 Les systèmes de types On a recours à l’inférence de types. Il existe plusieurs systèmes : — Types simples : décidable mais pas de type principal — ML : décidable et type principal — OCaml : décidable mais plus de type principal — System F : indécidable et pas de type principal 1