Commits

Paweł Wieczorek committed 2443563 Draft

Added alter to Set

Comments (0)

Files changed (1)

 (*********************************************************************************************************************
  * Map
  ********************************************************************************************************************)
-
 let map f avl = 
     let new_avl = make_empty () in
     iter (fun x -> insert (f x) new_avl) avl;
     new_avl
 
 (*********************************************************************************************************************
- * 
+ * Update
  ********************************************************************************************************************)
 
+let update (f : 'a -> 'a) avl = 
+    let new_avl = make_empty () in
+    iter (fun x -> insert (f x) new_avl) avl;
+    new_avl
+
+(*********************************************************************************************************************
+ * Alter
+ ********************************************************************************************************************)
+
+let alter (f : 'a -> 'a option) avl = 
+    let new_avl = make_empty () in
+    let g x  =
+        match f x with
+            | None ->
+                ()
+
+            | Some y ->
+                insert y new_avl
+        in
+    iter g avl;
+    new_avl
+
 (*********************************************************************************************************************
  * To/From list
  ********************************************************************************************************************)