Le typage de CAML VI
Fonctions récursives
une fonction récursive est une expression fonctionnelle déclarée par let rec.
let rec f = function x -> corps
#let rec fact1 = function n ->
if n <= 0 then 1
else n * fact1 (n-1);;
fact1 : int -> int = <fun>
Typage dans Env
-
Choisir deux nouvelles variables de type t1 et t2
pour désigner le type de f puis étendre Env
Env' = ë (f:t1 ® t2), (x:t1)<| Env û
-
typer corps (Env' |- corps : ty2)
-
Faire le bilan des contraintes (t1 = t1 et t2 = t2)
(Rec) |
ë (f:t1 ® t2), (x:t1)<| Env û |- corps : t2 |
|
|
Env |- rec f = function x -> corps : t1 ® t2 |
|
|