Programmation Fonctionnelle

Polytech Paris Saclay
2024-2025

Adrien Durier

OCaml

II. Déclarations, portée & top-level

II. Déclarations, portée & top-level

Rappels & Correction DM1

OCaml

Expressions

Les expressions sont les blocs de bases d'OCaml

 Deux Règles:

  1. Toute expression a un type
  2. Tout ce qui a un type est une expression
let x = 3 * 4

Donc, ceci n'est pas une expression !!!!

(car ceci n'a pas de type!)

Expressions

Les expressions sont les blocs de bases d'OCaml

3 * 4

Par contre, ceci est une expression !!!!

 Deux Règles:

  1. Toute expression a un type
  2. Tout ce qui a un type est une expression

(car ceci est de type int!)

Expressions

Les expressions sont les blocs de bases d'OCaml

 Deux Règles:

  1. Toute expression (correcte) a un type
  2. Tout ce qui a un type est une expression        
3 * x

Par contre, ceci est une expression !!!!

Expressions

x + 7
true
x > 8
if x then y else z

Les lignes suivantes sont également des expressions (et ont donc un type) !

bool

int

bool

?

  1. Toute expression correcte a un type

→ Si on connaît le type des variables !

Expressions

if 
	x 
    then 
    	y 
    else 
    	z

?

x: ?

z: ?

y: ?

Expressions

if 
	x 
    then 
    	y 
    else 
    	z

?

x: bool

z: ?

y: ?

=

=

Déclarations

1. Un programme est une succession de déclarations let

let x = 3
let y = 4
let f x = x * y
let y = f 5

2. On ne peut pas utiliser une déclarations let dans une expression

let f x = let x = 4; 
	blablabla + x ...

Correction DM1

II. Déclarations, portée & top-level

Correction du DM

(sur Moodle)

OCaml

Evaluation: CC

  • Mini - DM:
    • Un mini DM réalisé: k points bonus
      • (k constante indépendante de la note)
    • /!\ Détection des réponses au hasard!
    • + Moyenne des DM prise en compte SEULEMENT si améliore votre note de CC
  • Calcul de la note de CC:
N1 * 0,5 + N2 * 0,5 + k*n
  • N1: Interrogation
  • N2: TP noté
  • n: nombre de DM réalisés
  • + Moyenne des DM si cela remonte votre note. (coef 0.2)

Portée

let ... = ... in ...

→ Définit une portée pour la variable x

(libération de mémoire, etc)

let x = e in e'

e et e' doivent être des expressions

Ou la définition de variables locales

  • x est définie dans e' (et seulement dans e')
  • Si x était déjà défini, le nom est écrasé (mais seulement dans e')

Portée

let x z y =
let x =
let z =
y - z in
let x z y =
z - y in
x y z in
x + y
  1. Indiquer les lieurs
  2. Dire ce que la fonction calcule

Exercice!