--- /dev/null
+(* $Id$ *)
+
+let rec cut l ~len =
+ if len <= 0 then [], l else
+ match l with
+ a::l ->
+ let l1, l2 = cut l ~len:(len-1) in
+ a::l1, l2
+ | [] ->
+ invalid_arg "cut_list"
+
+let rec chop l ~len =
+ if l = [] then [] else
+ let l1, l2 =
+ try cut_list l ~len
+ with Invalid_argument _ -> l, []
+ in
+ l1 :: chop l2 ~len
+
+
+let rec iteri_aux ~f:f ~i = function
+ [] -> ()
+ | a::l -> f ~i a; iteri_aux ~f:f ~i:(i+1) l
+
+let iteri = iteri_aux ~i:0