src/Pure/General/table.ML
changeset 17709 299eeb303f04
parent 17579 830207835ab5
child 17913 4159e1523ad8
equal deleted inserted replaced
17708:6c6ecafd8c0e 17709:299eeb303f04
   102           fold right (f p (fold left x))
   102           fold right (f p (fold left x))
   103       | fold (Branch3 (left, p1, mid, p2, right)) x =
   103       | fold (Branch3 (left, p1, mid, p2, right)) x =
   104           fold right (f p2 (fold mid (f p1 (fold left x))));
   104           fold right (f p2 (fold mid (f p1 (fold left x))));
   105   in fold end;
   105   in fold end;
   106 
   106 
   107 fun fold_map_table f = 
   107 fun fold_map_table f =
   108   let
   108   let
   109     fun fold_map Empty s = (Empty, s)
   109     fun fold_map Empty s = (Empty, s)
   110       | fold_map (Branch2 (left, p as (k, x), right)) s =
   110       | fold_map (Branch2 (left, p as (k, x), right)) s =
   111           s
   111           s
   112           |> fold_map left
   112           |> fold_map left
   222     handle SAME => tab
   222     handle SAME => tab
   223   end;
   223   end;
   224 
   224 
   225 fun update (key, x) tab = modify key (fn _ => x) tab;
   225 fun update (key, x) tab = modify key (fn _ => x) tab;
   226 fun update_new (key, x) tab = modify key (fn NONE => x | SOME _ => raise DUP key) tab;
   226 fun update_new (key, x) tab = modify key (fn NONE => x | SOME _ => raise DUP key) tab;
   227 fun default (p as (key, x)) tab = if defined tab key then tab else update p tab;
   227 fun default (key, x) tab = modify key (fn NONE => x | SOME _ => raise SAME) tab;
   228 fun map_entry key f = modify key (fn NONE => raise SAME | SOME x => f x);
   228 fun map_entry key f = modify key (fn NONE => raise SAME | SOME x => f x);
   229 
   229 
   230 
   230 
   231 (* extend and make *)
   231 (* extend and make *)
   232 
   232