src/Pure/library.ML
changeset 18050 652c95961a8b
parent 18011 685d95c793ff
child 18148 7921f41165cf
--- a/src/Pure/library.ML	Mon Oct 31 01:43:22 2005 +0100
+++ b/src/Pure/library.ML	Mon Oct 31 16:00:15 2005 +0100
@@ -99,7 +99,7 @@
   val fold_map: ('a -> 'b -> 'c * 'b) -> 'a list -> 'b -> 'c list * 'b
   val foldl_map: ('a * 'b -> 'a * 'c) -> 'a * 'b list -> 'a * 'c list
   val foldr1: ('a * 'a -> 'a) -> 'a list -> 'a
-  val foldln: ('a * int -> 'b -> 'b) -> 'a list -> 'b -> 'b
+  val fold_index: (int * 'a -> 'b -> 'b) -> 'a list -> 'b -> 'b
   val unflat: 'a list list -> 'b list -> 'b list list
   val splitAt: int * 'a list -> 'a list * 'a list
   val dropwhile: ('a -> bool) -> 'a list -> 'a list
@@ -504,7 +504,11 @@
         | itr (x::l) = f(x, itr l)
   in  itr l  end;
 
-fun foldln f xs e = fst (foldl (fn ((e,i), x) => (f (x,i) e, i+1)) ((e,1),xs));
+fun fold_index f =
+  let
+    fun fold_aux _  [] y = y
+      | fold_aux i (x :: xs) y = fold_aux (i+1) xs (f (i, x) y);
+  in fold_aux 0 end;
 
 fun foldl_map f =
   let