added distinct_fst_string;
authorwenzelm
Mon, 03 Nov 1997 17:56:39 +0100
changeset 4102 f746af27164b
parent 4101 e8ad51c88be9
child 4103 884968ad30da
added distinct_fst_string;
src/Pure/library.ML
--- a/src/Pure/library.ML	Mon Nov 03 17:55:55 1997 +0100
+++ b/src/Pure/library.ML	Mon Nov 03 17:56:39 1997 +0100
@@ -579,6 +579,20 @@
 
 fun distinct l = gen_distinct (op =) l;
 
+(*tuned version of distinct -- eq wrt. strings in fst component*)
+fun distinct_fst_string lst =
+  let
+    fun mem_str ((_:string, _), []) = false
+      | mem_str (p as (x, _), ((y, _) :: qs)) = x = y orelse mem_str (p, qs);
+
+    fun dist (rev_seen, []) = rev rev_seen
+      | dist (rev_seen, p :: ps) =
+          if mem_str (p, rev_seen) then dist (rev_seen, ps)
+          else dist (p :: rev_seen, ps);
+  in
+    dist ([], lst)
+  end;
+
 
 (*returns the tail beginning with the first repeated element, or []*)
 fun findrep [] = []