| 77846 |      1 | (*  Title:      Pure/General/vector.ML
 | 
|  |      2 |     Author:     Makarius
 | 
|  |      3 | 
 | 
|  |      4 | Additional operations for structure Vector, following Isabelle/ML conventions.
 | 
|  |      5 | *)
 | 
|  |      6 | 
 | 
|  |      7 | signature VECTOR =
 | 
|  |      8 | sig
 | 
|  |      9 |   include VECTOR
 | 
|  |     10 |   val nth: 'a vector -> int -> 'a
 | 
|  |     11 |   val forall: ('a -> bool) -> 'a vector -> bool
 | 
| 77853 |     12 |   val member: ('a * 'a -> bool) -> 'a vector -> 'a -> bool
 | 
| 77846 |     13 |   val fold: ('a -> 'b -> 'b) -> 'a vector -> 'b -> 'b
 | 
|  |     14 |   val fold_rev: ('a -> 'b -> 'b) -> 'a vector -> 'b -> 'b
 | 
|  |     15 | end;
 | 
|  |     16 | 
 | 
|  |     17 | structure Vector: VECTOR =
 | 
|  |     18 | struct
 | 
|  |     19 | 
 | 
|  |     20 | open Vector;
 | 
|  |     21 | 
 | 
|  |     22 | fun nth vec i = sub (vec, i);
 | 
|  |     23 | 
 | 
|  |     24 | val forall = all;
 | 
|  |     25 | 
 | 
| 77853 |     26 | fun member eq vec x = exists (fn y => eq (x, y)) vec;
 | 
|  |     27 | 
 | 
| 77846 |     28 | fun fold f vec x = foldl (fn (a, b) => f a b) x vec;
 | 
|  |     29 | fun fold_rev f vec x = foldr (fn (a, b) => f a b) x vec;
 | 
|  |     30 | 
 | 
|  |     31 | end;
 |