src/Pure/library.ML
changeset 20443 84a624a8f773
parent 20348 d59364649bcc
child 20510 5e844572939d
equal deleted inserted replaced
20442:04621ea9440e 20443:84a624a8f773
   541         | itr (a::l) = f(a, itr l)
   541         | itr (a::l) = f(a, itr l)
   542   in  itr l  end;
   542   in  itr l  end;
   543 
   543 
   544 (*  (op @) [x1, ..., xn]  ===>   x1 @ (x2 ... @ (x[n-1] @ xn))
   544 (*  (op @) [x1, ..., xn]  ===>   x1 @ (x2 ... @ (x[n-1] @ xn))
   545     for n > 0, operators that associate to the right (not tail recursive)*)
   545     for n > 0, operators that associate to the right (not tail recursive)*)
   546 fun foldr1 f l =
   546 fun foldr1 f [] = raise Empty
   547   let fun itr [x] = x
   547   | foldr1 f l = 
   548         | itr (x::l) = f(x, itr l)
   548       let fun itr [x] = x
   549   in  itr l  end;
   549 	    | itr (x::l) = f(x, itr l)
       
   550       in  itr l  end;
   550 
   551 
   551 fun fold_index f =
   552 fun fold_index f =
   552   let
   553   let
   553     fun fold_aux _ [] y = y
   554     fun fold_aux _ [] y = y
   554       | fold_aux i (x :: xs) y = fold_aux (i+1) xs (f (i, x) y);
   555       | fold_aux i (x :: xs) y = fold_aux (i+1) xs (f (i, x) y);