src/Pure/library.ML
changeset 25681 ded611be9604
parent 25549 7040555f20c7
child 25702 a61554b1e7a9
equal deleted inserted replaced
25680:909bfa21acc2 25681:ded611be9604
    73   val singleton: ('a list -> 'b list) -> 'a -> 'b
    73   val singleton: ('a list -> 'b list) -> 'a -> 'b
    74   val yield_singleton: ('a list -> 'c -> 'b list * 'c) -> 'a -> 'c -> 'b * 'c
    74   val yield_singleton: ('a list -> 'c -> 'b list * 'c) -> 'a -> 'c -> 'b * 'c
    75   val apply: ('a -> 'a) list -> 'a -> 'a
    75   val apply: ('a -> 'a) list -> 'a -> 'a
    76   val perhaps_apply: ('a -> 'a option) list -> 'a -> 'a option
    76   val perhaps_apply: ('a -> 'a option) list -> 'a -> 'a option
    77   val perhaps_loop: ('a -> 'a option) -> 'a -> 'a option
    77   val perhaps_loop: ('a -> 'a option) -> 'a -> 'a option
       
    78   val foldl1: ('a * 'a -> 'a) -> 'a list -> 'a
    78   val foldr1: ('a * 'a -> 'a) -> 'a list -> 'a
    79   val foldr1: ('a * 'a -> 'a) -> 'a list -> 'a
    79   val foldl_map: ('a * 'b -> 'a * 'c) -> 'a * 'b list -> 'a * 'c list
    80   val foldl_map: ('a * 'b -> 'a * 'c) -> 'a * 'b list -> 'a * 'c list
    80   val flat: 'a list list -> 'a list
    81   val flat: 'a list list -> 'a list
    81   val unflat: 'a list list -> 'b list -> 'b list list
    82   val unflat: 'a list list -> 'b list -> 'b list list
    82   val burrow: ('a list -> 'b list) -> 'a list list -> 'b list list
    83   val burrow: ('a list -> 'b list) -> 'a list list -> 'b list list
   398 fun foldr f (l, e) =
   399 fun foldr f (l, e) =
   399   let fun itr [] = e
   400   let fun itr [] = e
   400         | itr (a::l) = f(a, itr l)
   401         | itr (a::l) = f(a, itr l)
   401   in  itr l  end;
   402   in  itr l  end;
   402 
   403 
       
   404 (*  (op @) [x1, ..., xn]  ===>  ((x1 @ x2) @ x3) ... @ xn
       
   405     for operators that associate to the left (TAIL RECURSIVE)*)
       
   406 fun foldl1 f [] = raise Empty
       
   407   | foldl1 f (x :: xs) = foldl f (x, xs);
       
   408 
   403 (*  (op @) [x1, ..., xn]  ===>   x1 @ (x2 ... @ (x[n-1] @ xn))
   409 (*  (op @) [x1, ..., xn]  ===>   x1 @ (x2 ... @ (x[n-1] @ xn))
   404     for n > 0, operators that associate to the right (not tail recursive)*)
   410     for n > 0, operators that associate to the right (not tail recursive)*)
   405 fun foldr1 f [] = raise Empty
   411 fun foldr1 f [] = raise Empty
   406   | foldr1 f l =
   412   | foldr1 f l =
   407       let fun itr [x] = x
   413       let fun itr [x] = x