Adloun

Lire un type sans le déclarer

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 2 — Le langage OCaml

Énoncé

Le compilateur infère le type de chacune de ces définitions. Lequel, et pourquoi ?


let f x = x + 1
let g x = x ^ "!"
let h b y = if b then y else y
let k (a, b) = b
let m x = x *. 2.0
let p x y = if x > y then x else y

Corrigé

Les réponses du compilateur, obtenues par ocamlc -i :


val f : int -> int
val g : string -> string
val h : bool -> 'a -> 'a
val k : 'a * 'b -> 'b
val m : float -> float
val p : 'a -> 'a -> 'a

Le raisonnement, à chaque fois, part d'un opérateur et remonte :

Ce que l'exercice éprouve. Le type n'est pas une décoration qu'on écrirait pour faire plaisir au compilateur : c'est une conséquence du code, calculée par lui. Un type inféré qui vous surprend est presque toujours le signe que le code ne fait pas ce que vous croyiez. Écrire let moyenne a b = (a + b) / 2 puis découvrir int -> int -> int là où l'on attendait des flottants est le premier diagnostic gratuit du langage.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.