En gros, une fonction d´ordre supérieur estune fonction qui à une fonction associe une autre fonction. (je n´ais jamais entendue ce terme, mais c´est ce que fait ton programme en tout cas).
let h = function f -> (function y -> (f y) + y);;
les parenthèse te montre un peu plus ce qui se passe : tu donne à la fonction h une fonction (qui s´appelle f ici) et h renvoie une autre fonction (disons que c´est g) défini par :
g(y)=f(y)+y
tu peut par exemple écrire :
let f=function x -> 3*x;;
let g=h f;;
g 2;;
et ça renvoie 8 car c´est f(2)+2=3*2+2=8