equal
deleted
inserted
replaced
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 |