let rec iter_term2 funvar funop funcoller premier = function
(Var x) -> funvar x
| (Operation (oper,fils)) ->
let
recur term = iter_term2 funvar funop funcoller premier term
in
funop oper
(List.fold_left
(fun x y -> funcoller x (recur y))
premier fils
)