Ordre supérieur
Sommer tous les éléments d'une liste ?
let rec somme = function l -> match l with
| [] -> 0
| h::r -> h + (somme r) ;;
Ici
0:int et (prefix +):int -> int -> int.
let rec somme_abs =
function zero -> function plus -> function l ->
match l with
| [] -> zero
| h::r ->
(plus h (somme_abs zero plus r)) ;;
On généralise
zero: a et plus: b->a->a.
let somme = function l -> somme_abs 0 (prefix +) l;;
Pour tout environnement E si F est un identificateur (monomorphe) tel
que
F -E-> F et si
(function x -> F(x)) -E-> G on a :
GºF dans le sens où
" x G(x) = F(x) et
function x -> F(x) Û F
let somme = somme_abs 0 (prefix +) ;;
let mult = somme_abs 1 (prefix *) ;;