no need to reverse the MList to reverse a sequence

This commit is contained in:
Simon Cruanes 2013-02-25 10:35:14 +01:00
parent df7ef45ad5
commit 213def7aab

View file

@ -148,6 +148,10 @@ module MList = struct
if l.tl != _empty () then iteri (i+l.len) f l.tl if l.tl != _empty () then iteri (i+l.len) f l.tl
in iteri 0 f l in iteri 0 f l
let iter_rev f l =
(if l.tl != _empty () then iter f l.tl);
for i = l.len - 1 downto 0 do f l.content.(i); done
let length l = let length l =
let rec len acc l = let rec len acc l =
if l.tl == _empty () then acc+l.len else len (acc+l.len) l.tl if l.tl == _empty () then acc+l.len else len (acc+l.len) l.tl
@ -252,8 +256,7 @@ let drop n seq =
(** Reverse the sequence. O(n) memory. *) (** Reverse the sequence. O(n) memory. *)
let rev seq = let rev seq =
let l = MList.of_seq seq in let l = MList.of_seq seq in
let l' = MList.rev l in from_iter (fun k -> MList.iter_rev k l)
from_iter (fun k -> MList.iter k l')
(** Do all elements satisfy the predicate? *) (** Do all elements satisfy the predicate? *)
let for_all p seq = let for_all p seq =