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
          )