Cours introduction à Caml, tutoriel & guide de travaux pratiques en pdf.
Listes
La liste est une structure de donnée fondamentale de Caml, et elle bénéficie d’une syntaxe particulière. Une liste ne peut contenir que des éléments de même type.
# let lst = [1; 8; 9] ;; val lst : int list = [1; 8; 9] # 3 :: lst ;; – : int list = [3; 1; 8; 9] # « pif » :: lst ;; This expression has type int list but is here used with type string list La bibliothèque standard contient un certain nombre de fonctions pour manipuler les listes, dans un module judicieusement nommé List. Nous aurons l’occasion de revenir sur le système de modules de Caml, pour le moment retenez simplement qu’une fonction foo d’un module Bar peut être utilisée enemployant la syntaxe Bar.foo. Alternativement, la déclaration open Bar rend directement accessibles les fonctions de ce module, de sorte aue foo devient équivalent à Bar.foo.
# List.length lst ;; – : int = 3 # List.rev lst ;; – : int list = [9; 8; 1] # lst @ lst ;; – : int list = [1; 8; 9; 1; 8; 9] Le filtrage (en anglais on parle de pattern matching) est une technique typique des langages de programmation fonctionnels. Il permet de définir une fonction par cas selon la forme de la donnée qu’elle reçoit. Par exemple, pour définir une fonction qui calcule la longueur d’une liste, on peut procéder de la façon suivante : let rec length list = match list with | [] -> 0 | _ :: queue -> 1 + length queue Le motif _ sert à accepter n’importe quelle valeur, on l’utilise ici parce que la valeur de la tête de la liste n’est pas prise en compte.
Exercice 6 – Filtrages 1. Définir une fonction est_vide qui renvoie true si et seulement si la liste passée en argument est vide. 2. Définir les fonctions head et tail qui renvoient respectivement la tête et la queue d’une liste. Note : Caml fournit une fonction failwith pour utiliser dans les cas d’erreur, par exemple : let div x y = if y = 0 then failwith « Division par zéro » else x / y ;;