Programmation Fonctionnelle Avancée
Introduction
OCaml
... Core ML
Hindley-Milner polymorphic types
Damas-Milner type inference
First-class functions Algebraic data types
Pattern matching
Programmation Fonctionnelle Avancée
Introduction
OCaml
Histoire d’OCaml
I1973 ML Milner (tactiques de preuves pour le prouveur LCF)
I1980 Projet Formel à l’INRIA (Gérard Huet), Categorical
Abstract Machine (Pierre-Louis Curien)
I1984-1990 Définition de SML (Milner)
I1987 Caml (implémenté en Lisp) Guy Cousineau, Ascander
Suarez, (avec Pierre Weis et Michel Mauny)
I1990-1991 Caml Light par Xavier Leroy (et Damien Doligez
pour la gestion de la mémoire)
I1995 Caml Special Light puis 1996 OCaml (Xavier Leroy,
Jérôme Vouillon, Didier Rémy, Michel Mauny)
Voir http://events.inf.ed.ac.uk/Milner2012/X_
Leroy-html5-mp4.html !
Programmation Fonctionnelle Avancée
Introduction
OCaml
Plusieurs traits intéressants
les fonctions fournissent un méchanisme d’abstraction puissant
l e t double l = L i s t . map ( fun x−> x ∗2) l ; ;
|| v a l double : i n t l i s t −> i n t l i s t = <fun>
un système de type polymorphe et implicite qui capture
beaucoup d’erreurs
let i n d ex = i n p u t _ l i n e ( open_in " da ta " ) ; ;
|| v a l i n d ex : s t r i n g = "2 "
L i s t . a s s o c i n d e x [ 1 , " one " ; 2 , " two " ] ; ;
|| C h a r a c t e r s 18 −19:
|| L i s t . a s s o c i n d e x [ 1 , " one " ; 2 , " two " ] ; ;
|| ^
|| E rr o r : Th i s e x p r e s s i o n ha s t y p e i n t bu t an e x p r e s s i o n was e xp ec t e d o f t y
|| pe
|| string
Programmation Fonctionnelle Avancée
Introduction
OCaml
Plusieurs traits intéressants
la définition par cas simplifie et sécurise l’implémentation
l e t r e c destutter l =
match lw i t h
| [ ] −> [ ]
| x : : y : : r e s t −>
i f x=y then d e s t u t t e r ( y : : r e s t )
e l s e x : : d e s t u t t e r ( y : : r e s t ) ; ;
|| C h a r a c t e r s 24 −161:
|| . match lw i t h
|| | [ ] −> [ ]
|| | x : : y : : r e s t −>
|| i f x=y then d e s t u t t e r ( y : : r e s t )
|| e l s e x : : d e s t u t t e r ( y : : r e s t ) . . .
|| W arning 8 : t h i s p a t t e r n −matching is not exhaustive .
|| H e re i s an exa mp l e o f avalue t h a t i s not matched :
|| _ : : [ ]
|| v a l d e s t u t t e r : ’ a l i s t −> ’ a l i s t = <f u n >