• Aucun résultat trouvé

[PDF] Introduction à OCaml support de cours approfondi | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Introduction à OCaml support de cours approfondi | Formation informatique"

Copied!
46
0
0

Texte intégral

(1)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Introduction `

a OCaml

Thomas Blanc Terminale de l’´ecole Alsacienne

(2)

1 D´ecouverte d’OCaml

Quelques connaissances g´en´erales Valeurs et types de base

Faire des tests

2 Utilisation plus avanc´ee

Fonctions r´ecursives D´eclarer des types Le pattern matching

3 Utiliser OCaml de fa¸con imp´erative

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

4 Les modules

(3)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Robin Milner, ML et OCaml

Quelques dates

1973 : Robin Milner mets au point ML. Ancˆetre d’OCaml `a la

University of Edinburgh.

1987 : L’INRIA publie Caml, qui reprend les principes de ML. 1996 : Xavier Leroy, Didier R´emy et J´erˆome Vouillon mettent

au point Objective Caml, qui sera renom´e en OCaml.

2012 : L’INRIA publie OCaml 4.0, le langage est connu est

(4)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Principes g´

en´

eraux

En quoi OCaml est sp´ecial

Un outil extr´emement puissant : le filtrage de motifs (ou pattern matching).

Un excellent moyen de g´erer les erreurs : le syst`eme d’exceptions.

(5)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Principes g´

en´

eraux

En quoi OCaml est sp´ecial

Un typage statique fort. D´etermin´e par inf´erence.

Multiparadigme : fonctionnel `a effet de bords, objets, modules. Un outil extr´emement puissant : le filtrage de motifs (ou pattern matching).

Un excellent moyen de g´erer les erreurs : le syst`eme d’exceptions.

(6)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Principes g´

en´

eraux

En quoi OCaml est sp´ecial

Un typage statique fort. D´etermin´e par inf´erence.

Multiparadigme : fonctionnel `a effet de bords, objets, modules.

Un excellent moyen de g´erer les erreurs : le syst`eme d’exceptions.

(7)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Principes g´

en´

eraux

En quoi OCaml est sp´ecial

Un typage statique fort. D´etermin´e par inf´erence.

Multiparadigme : fonctionnel `a effet de bords, objets, modules. Un outil extr´emement puissant : le filtrage de motifs (ou pattern matching).

Un excellent moyen de g´erer les erreurs : le syst`eme d’exceptions.

(8)

Principes g´

en´

eraux

En quoi OCaml est sp´ecial

Un typage statique fort. D´etermin´e par inf´erence.

Multiparadigme : fonctionnel `a effet de bords, objets, modules. Un outil extr´emement puissant : le filtrage de motifs (ou pattern matching).

Un excellent moyen de g´erer les erreurs : le syst`eme d’exceptions.

(9)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Voyons quelques types...

Les valeurs de base :

Les entiers, les flottants, les chaˆınes de caract`eres, les bool´eens...

...les listes, les tableaux... ...les types produits et somme... et les fonctions !

(10)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Voyons quelques types...

Les valeurs de base :

Les entiers, les flottants, les chaˆınes de caract`eres, les bool´eens...

(11)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

Voyons quelques types...

Les valeurs de base :

Les entiers, les flottants, les chaˆınes de caract`eres, les bool´eens...

...les listes, les tableaux... ...les types produits et somme...

(12)

Voyons quelques types...

Les valeurs de base :

Les entiers, les flottants, les chaˆınes de caract`eres, les bool´eens...

...les listes, les tableaux... ...les types produits et somme... et les fonctions !

(13)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

let !

Utiliser let

let x = 1 ; ;

let y = ”bonjour”; ; let f x = x + 1 ; ;

Attention `a la port´ee des valeurs !

Le x qui sert de param`etre `a f n’est pas le mˆeme que celui d´efini au d´ebut. Ils n’ont rien `a voir !

(14)

La port´

ee des valeurs

Port´ee des valeurs d´eclar´ees

Les variables d´eclar´ees avec “let x = ... ; ;” sont toujours accessible, sauf si une autre valeur du mˆeme nom est d´eclar´ee plus tard. On parle de variable globale.

Port´ee des arguments d’une fonction

Les arguments d’une fonction ne sont accessible que depuis l’int´erieur d’une fonction.

Si une valeur du mˆeme nom qu’un argument a d´ej`a ´et´e d´eclar´ee, elle ne sera pas accessible depuis la fonction.

(15)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Quelques connaissances g´en´erales Valeurs et types de base Faire des tests

eclarer des variables locales

O

n peut d´eclarer une variable locale au milieu d’un calcul avec let ... in :

let x = 4 ; ; let y =

let x2 = x*x in (x2-x)/2 ; ;

La port´ee de la variable x2 est limit´ee au calcul pour lequel elle a ´et´e d´eclar´ee “(x2-x)/2”

(16)

Faire des tests avec if ... then ... else ...

L’instruction if

Il est possible d’effectuer des tests avec l’instruction if : let f x =

if x = 0 then ”zero” else ”non-nul”

Il est tr`es important de noter que les expressions de then et de else doivent ˆetre de mˆeme type !

(17)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Fonctions r´ecursives D´eclarer des types Le pattern matching

1 D´ecouverte d’OCaml

Quelques connaissances g´en´erales Valeurs et types de base

Faire des tests

2 Utilisation plus avanc´ee

Fonctions r´ecursives D´eclarer des types Le pattern matching

3 Utiliser OCaml de fa¸con imp´erative Les r´ef´erences

Les boucles

Structures de donn´ees imp´eratives 4 Les modules

(18)

La r´

ecursivit´

e

Faire une boucle

On peut r´eutiliser le nom de la fonction qu’on d´eclare en ajoutant le mot clef rec :

let rec factorielle n = if n <= 0

then 1

else n * ( factorielle (n-1)) ; ;

Il ne faut pas oublier de mettre une condition pour arrˆeter la fonction, sinon elle ne s’arrˆete pas.

(19)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Fonctions r´ecursives D´eclarer des types Le pattern matching

La r´

ecursivit´

e terminale

Optimiser les appels r´ecursifs

Une fonction r´ecursive peut ˆetre optimis´ee par le compilateur si les appels r´ecursifs sont toujours appel´es en dernier.

let factorielle n = let rec aux n res = if n <= 0

then res

else aux (n-1) (res*n) in

(20)

Les types

D´eclarer un alias

On peut d´eclarer un alias tout simplement avec l’instruction type. type entier = int ; ;

D´eclarer des types somme

On peut d´eclarer un type qui sera la somme d’autres types :

type nombre = Entier of entier | Reel of float | Rationnel of (entier * entier) | NaN ; ;

(21)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Fonctions r´ecursives D´eclarer des types Le pattern matching

Les types record

D´eclarer un record

On peut d´eclarer un type somme dont les ´el´ements sont associ´es `a un nom :

type point = { x : int ; y : int } ; ;

Utiliser un record

let p = { x = 0 ; y = 15} ; ; p.x ; ;

(22)

Les types param´

etr´

es

Cr´eer un type param´etr´e

type ’a arbre = Noeud of ’a arbre * ’a * ’a arbre | Feuille ; ; Notez qu’une d´eclaration de type est toujours r´ecursive.

(23)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Fonctions r´ecursives D´eclarer des types Le pattern matching

Reconnaitre un type somme

Entrer dans un type somme se fait avec un filtrage

let x = Rationnel (5,6) ; ; match x with

Rationnel (p,q) -> (float p) /. (float q) | Entier n -> float n

| Reel f -> f | NaN -> nan ; ;

(24)

Le pi`

ege du pattern matching

Attention `a la port´ee des variables !

On ne peut pas comparer deux variables en pattern matching. Pourquoi ?

(25)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

1 D´ecouverte d’OCaml

Quelques connaissances g´en´erales Valeurs et types de base

Faire des tests 2 Utilisation plus avanc´ee

Fonctions r´ecursives D´eclarer des types Le pattern matching

3 Utiliser OCaml de fa¸con imp´erative

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

(26)

La r´

ef´

erence, la valeur modifiable

D´eclarer et utiliser une r´ef´erence

let x = ref 0 ; ; x := 1 ; ; x := !x + 4 ; ; !x ; ;

Comportement

Si une r´ef´erence est modifi´ee, mˆeme dans une fonction, sa valeur est modifi´ee partout. En fait, une r´ef´erence n’est pas une valeur mais l’adresse d’une case m´emoire o`u est stock´ee la valeur. On peut aussi que modifier une r´ef´erence est une action de type unit. Cela veut dire qu’elle ne renvoie aucune information.

(27)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

La boucle for

Pour i allant de 1 `a 20... let x = ref 0 ; ; for i = 0 to 20 do x := !x + i ; done ; ; !x ; ;

(28)

La boucle while

Tant que cette condition est vraie...

let x = ref 50 000 ; ; let i = ref 0 ; ; while x <> 1 do incr i ; ; x := if x mod 2 = 0 then !x / 2 else !x * 3 + 1 done ; ; !i ; ;

(29)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

Quelques structures pr´

ed´

efinies

Structures modifiables

’a ref, ’a array, string

’a Queue.t, ’a Stack.t

(30)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

Quelques structures pr´

ed´

efinies

Structures modifiables

’a ref, ’a array, string ’a Queue.t, ’a Stack.t

(31)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Les r´ef´erences Les boucles

Structures de donn´ees imp´eratives

Quelques structures pr´

ed´

efinies

Structures modifiables

’a ref, ’a array, string ’a Queue.t, ’a Stack.t

(32)

Structures imp´

eratives customiz´

ees

D´eclaration

type p i = { mutable x : int ; mutable y : int } ; ;

Utilisation

let p = { x = 0 ; y = 0 } ; ; p.y <- 100 ; ;

(33)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

1 D´ecouverte d’OCaml

Quelques connaissances g´en´erales Valeurs et types de base

Faire des tests 2 Utilisation plus avanc´ee

Fonctions r´ecursives D´eclarer des types Le pattern matching

3 Utiliser OCaml de fa¸con imp´erative Les r´ef´erences

Les boucles

Structures de donn´ees imp´eratives

(34)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

for all, exists, mem, find, filter, partition fast sort, merge

(35)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

rev, append, rev append, concat

iter, iteri, map, mapi, rev map, fold left for all, exists, mem, find, filter, partition fast sort, merge

(36)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

rev, append, rev append, concat

iter, iteri, map, mapi, rev map, fold left

(37)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

rev, append, rev append, concat

iter, iteri, map, mapi, rev map, fold left for all, exists, mem, find, filter, partition

fast sort, merge

(38)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

rev, append, rev append, concat

iter, iteri, map, mapi, rev map, fold left for all, exists, mem, find, filter, partition fast sort, merge

(39)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Tout sur les listes !

Fonctions de base

length, hd, tl, nth

rev, append, rev append, concat

iter, iteri, map, mapi, rev map, fold left for all, exists, mem, find, filter, partition fast sort, merge

(40)

Appeler un module

Appel direct

let l = [1 ;2 ;3] ; ; List.hd l ; ;

Appel de tout un module

open List ; ; tl l ; ;

(41)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Des modules partout !

Les modules qui seront utiles

Array, String, Random, Printf, Char

Map, Set, Hashtbl

Buffer, Stack, Queue, Stream Arg, Sys, Marshal, Filename

(42)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Des modules partout !

Les modules qui seront utiles

Array, String, Random, Printf, Char Map, Set, Hashtbl

(43)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Des modules partout !

Les modules qui seront utiles

Array, String, Random, Printf, Char Map, Set, Hashtbl

Buffer, Stack, Queue, Stream

(44)

Des modules partout !

Les modules qui seront utiles

Array, String, Random, Printf, Char Map, Set, Hashtbl

Buffer, Stack, Queue, Stream Arg, Sys, Marshal, Filename

(45)

D´ecouverte d’OCaml Utilisation plus avanc´ee Utiliser OCaml de fa¸con imp´erative Les modules

Modules externes D´eclarer un module

Fabriquer rapidement un module

Cr´eer son module

module Mod = struct type t = int let f () = 0 let g x = x+1 end ; ;

(46)

Signer un module

Sp´ecifier la signature module type X = sig type t val f : unit -> t val g : t -> t end m odule M : X = Mod ; ;

Références

Documents relatifs

le style trampoline, ont la monade de ontinuation, promise la monade de promesse, et equeue

The results showed local pollinator adaptation in mountain plants, and as well as distinct differences in pollinator guilds, floral morphology, scent composition and colour

La première apparition dans l’œuvre doubrovskienne d’un personnage de compagne- lectrice, lors de la scène finale de Fils déjà mentionnée, laisse présager des

Compressional wave velocity versus azimuth data mea- sured on a Berea sandstone sample with no stress loading (open circles) and with 10 MPa uniaxial stress (solid circles) applied

Le style indirect assure que la pile d’exécution est vide à chaque opération bloquante (point de coopération), faisant apparaître la suite du traitement (ou.. sa continuation) sous

changement de type : bool´ een 7→ chaˆıne de caract` eres string of bool : bool -&gt; string chaˆıne de caract` eres 7→ bool´ een bool of string : string -&gt; bool

Les sources présentés sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sources constitue une

On colore le point c avec un niveau de gris variant avec le rapport n/N.. Vous pouvez aussi tenter