src/Pure/library.ML
changeset 21182 747ff99b35ee
parent 21118 d9789a87825d
child 21335 6b9d4a19a3a8
equal deleted inserted replaced
21181:13c3fdccdf0d 21182:747ff99b35ee
   218   val \ : ''a list * ''a -> ''a list
   218   val \ : ''a list * ''a -> ''a list
   219   val \\ : ''a list * ''a list -> ''a list
   219   val \\ : ''a list * ''a list -> ''a list
   220   val distinct: ('a * 'a -> bool) -> 'a list -> 'a list
   220   val distinct: ('a * 'a -> bool) -> 'a list -> 'a list
   221   val duplicates: ('a * 'a -> bool) -> 'a list -> 'a list
   221   val duplicates: ('a * 'a -> bool) -> 'a list -> 'a list
   222   val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool
   222   val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool
   223   val first_duplicate: ('a * 'a -> bool) -> 'a list -> 'a option
       
   224 
   223 
   225   (*lists as tables -- see also Pure/General/alist.ML*)
   224   (*lists as tables -- see also Pure/General/alist.ML*)
   226   val gen_merge_lists: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list
   225   val gen_merge_lists: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list
   227   val merge_lists: ''a list -> ''a list -> ''a list
   226   val merge_lists: ''a list -> ''a list -> ''a list
   228   val merge_alists: (''a * 'b) list -> (''a * 'b) list -> (''a * 'b) list
   227   val merge_alists: (''a * 'b) list -> (''a * 'b) list -> (''a * 'b) list
  1049   let
  1048   let
  1050     fun dups [] = false
  1049     fun dups [] = false
  1051       | dups (x :: xs) = member eq xs x orelse dups xs;
  1050       | dups (x :: xs) = member eq xs x orelse dups xs;
  1052   in dups end;
  1051   in dups end;
  1053 
  1052 
  1054 fun first_duplicate eq =
       
  1055   let
       
  1056     fun dup [] = NONE
       
  1057       | dup (x :: xs) = if member eq xs x then SOME x else dup xs;
       
  1058   in dup end;
       
  1059 
  1053 
  1060 (** association lists -- legacy operations **)
  1054 (** association lists -- legacy operations **)
  1061 
  1055 
  1062 fun gen_merge_lists _ xs [] = xs
  1056 fun gen_merge_lists _ xs [] = xs
  1063   | gen_merge_lists _ [] ys = ys
  1057   | gen_merge_lists _ [] ys = ys