src/Pure/library.ML
changeset 40564 6827505e96e1
parent 40509 0bc83ae22789
child 40627 becf5d5187cc
equal deleted inserted replaced
40563:1e218365a20e 40564:6827505e96e1
    95   val get_index: ('a -> 'b option) -> 'a list -> (int * 'b) option
    95   val get_index: ('a -> 'b option) -> 'a list -> (int * 'b) option
    96   val get_first: ('a -> 'b option) -> 'a list -> 'b option
    96   val get_first: ('a -> 'b option) -> 'a list -> 'b option
    97   val eq_list: ('a * 'b -> bool) -> 'a list * 'b list -> bool
    97   val eq_list: ('a * 'b -> bool) -> 'a list * 'b list -> bool
    98   val map2: ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
    98   val map2: ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
    99   val fold2: ('a -> 'b -> 'c -> 'c) -> 'a list -> 'b list -> 'c -> 'c
    99   val fold2: ('a -> 'b -> 'c -> 'c) -> 'a list -> 'b list -> 'c -> 'c
       
   100   val forall2: ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
   100   val zip_options: 'a list -> 'b option list -> ('a * 'b) list
   101   val zip_options: 'a list -> 'b option list -> ('a * 'b) list
   101   val ~~ : 'a list * 'b list -> ('a * 'b) list
   102   val ~~ : 'a list * 'b list -> ('a * 'b) list
   102   val map_split: ('a -> 'b * 'c) -> 'a list -> 'b list * 'c list
   103   val map_split: ('a -> 'b * 'c) -> 'a list -> 'b list * 'c list
   103   val split_list: ('a * 'b) list -> 'a list * 'b list
   104   val split_list: ('a * 'b) list -> 'a list * 'b list
   104   val map_product: ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
   105   val map_product: ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
   541 
   542 
   542 fun fold2 f [] [] z = z
   543 fun fold2 f [] [] z = z
   543   | fold2 f (x :: xs) (y :: ys) z = fold2 f xs ys (f x y z)
   544   | fold2 f (x :: xs) (y :: ys) z = fold2 f xs ys (f x y z)
   544   | fold2 f _ _ _ = raise UnequalLengths;
   545   | fold2 f _ _ _ = raise UnequalLengths;
   545 
   546 
       
   547 fun forall2 P [] [] = true
       
   548   | forall2 P (x :: xs) (y :: ys) = P x y andalso forall2 P xs ys
       
   549   | forall2 P _ _ = false;
       
   550 
   546 fun map_split f [] = ([], [])
   551 fun map_split f [] = ([], [])
   547   | map_split f (x :: xs) =
   552   | map_split f (x :: xs) =
   548       let
   553       let
   549         val (y, w) = f x;
   554         val (y, w) = f x;
   550         val (ys, ws) = map_split f xs;
   555         val (ys, ws) = map_split f xs;