Pierre Weis Xavier Leroy
LE LANGAGE CAML
Deuxi`eme ´edition
Copyright 1992, 1993, 2009 Pierre Weis et Xavier Leroy.
Ce texte est distribu´e sous les termes de la licence Creative Commons BY-NC-SA. Le texte complet de la licence est disponible `a l’adresse suivante :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode Voici un r´esum´e des droits et conditions de cette licence.
• Vous ˆetes libres :
– de reproduire, distribuer et communiquer cette cr´eation au public – de modifier cette cr´eation
• Selon les conditions suivantes :
– Paternit´e. Vous devez citer le nom de l’auteur original de la mani`ere indiqu´ee par l’auteur de l’oeuvre ou le titulaire des droits qui vous conf`ere cette autorisation (mais pas d’une mani`ere qui sugg´ererait qu’ils vous soutiennent ou approuvent votre utilisation de l’oeuvre).
– Pas d’Utilisation Commerciale. Vous n’avez pas le droit d’utiliser cette cr´eation `a des fins commerciales.
– Partage des Conditions Initiales `a l’Identique. Si vous modifiez, transformez ou adaptez cette cr´eation, vous n’avez le droit de distribuer la cr´eation qui en r´esulte que sous un contrat identique `a celui-ci.
• A chaque r´eutilisation ou distribution de cette cr´eation, vous devez faire ap- paraˆıtre clairement au public les conditions contractuelles de sa mise `a disposition.
La meilleure mani`ere de les indiquer est un lien la page Web ci-dessus.
• Chacune de ces conditions peut ˆetre lev´ee si vous obtenez l’autorisation du titu- laire des droits sur cette oeuvre.
• Rien dans ce contrat ne diminue ou ne restreint le droit moral de l’auteur ou des auteurs.
A mes parents,` A Suzanne et Michel,`
A Lise, Marie, Jean-Baptiste et Ir`` ene, A H´` el`ene.
Pierre Weis
Table des mati` eres
Avant-propos xi
I Programmer en Caml 1
Avertissement 3
1 Premiers pas 5
1.1 Id´ees g´en´erales sur Caml 5
1.2 Dialoguer avec Caml 6
1.3 Les d´efinitions 6
1.4 Fonctions 8
1.5 Valeurs et programmes 13
1.6 Impression 13
1.7 Conventions syntaxiques 15
1.8 Diagrammes syntaxiques 17
2 R´ecursivit´e 19
2.1 Fonctions r´ecursives simples 19
2.2 D´efinitions par cas : le filtrage 27
2.3 Les tours de Hanoi 28
2.4 Notions de complexit´e 31
3 Programmation imp´erative 37
3.1 La programmation imp´erative 37
3.2 Boucles 39
3.3 Manipulation de polynˆomes 40
3.4 Impression des polynˆomes 42
3.5 Caract`eres et chaˆınes de caract`eres 46
3.6 Les r´ef´erences 47
3.7 Un programme utilisant des r´ef´erences 49
3.8 R´ecursivit´e et boucles 50
3.9 R`egle d’extensionnalit´e 52
3.10 Effets et ´evaluation 53
4 Fonctionnelles et polymorphisme 57
4.1 Notion de polymorphisme 57
4.2 Fonctions d’ordre sup´erieur 59
4.3 Typage et polymorphisme 61
4.4 Curryfication 64