Pas grand chose à dire, en fait.

let rec do_dessine i j k a = match a with
Feuille Noir ->  Graphics.fill_rect i j k k
Feuille Blanc -> ()
Noeud (c1,c2,c3,c4) ->
    let k2 = k/2 in
    do_dessine i (j+k2) k2 c1 ;
    do_dessine (i+k2) (j+k2) k2 c2 ;
    do_dessine i j k2 c3 ;
    do_dessine (i+k2) j k2 c4

let dessine_arbre k a = do_dessine 0 0 k a

On remarquera quand même la nécessité d'expliciter (par (), dit void, unique valeur du type unit) que le dessin d'un carré blanc s'obtient en ne faisant rien.

De fait en Caml, il n'y a pas de procédure, que des fonctions. Si une procédure est, de façon générale, une fonction qui ne renvoie rien, en Caml on a recours à une fonction qui renvoie rien (et rien c'est void).