92 Net{comb=ins1(keys,comb), var=var, atoms=atoms} |
92 Net{comb=ins1(keys,comb), var=var, atoms=atoms} |
93 | ins1 (VarK :: keys, Net{comb,var,atoms}) = |
93 | ins1 (VarK :: keys, Net{comb,var,atoms}) = |
94 Net{comb=comb, var=ins1(keys,var), atoms=atoms} |
94 Net{comb=comb, var=ins1(keys,var), atoms=atoms} |
95 | ins1 (AtomK a :: keys, Net{comb,var,atoms}) = |
95 | ins1 (AtomK a :: keys, Net{comb,var,atoms}) = |
96 let |
96 let |
97 val net' = if_none (Symtab.lookup atoms a) empty; |
97 val net' = the_default empty (Symtab.lookup atoms a); |
98 val atoms' = Symtab.update (a, ins1 (keys, net')) atoms; |
98 val atoms' = Symtab.update (a, ins1 (keys, net')) atoms; |
99 in Net{comb=comb, var=var, atoms=atoms'} end |
99 in Net{comb=comb, var=var, atoms=atoms'} end |
100 in ins1 (keys,net) end; |
100 in ins1 (keys,net) end; |
101 |
101 |
102 fun insert_safe eq entry net = insert eq entry net handle INSERT => net; |
102 fun insert_safe eq entry net = insert eq entry net handle INSERT => net; |
220 | subtr (Net {comb = comb1, var = var1, atoms = atoms1}) |
220 | subtr (Net {comb = comb1, var = var1, atoms = atoms1}) |
221 (Net {comb = comb2, var = var2, atoms = atoms2}) = |
221 (Net {comb = comb2, var = var2, atoms = atoms2}) = |
222 subtr comb1 comb2 |
222 subtr comb1 comb2 |
223 #> subtr var1 var2 |
223 #> subtr var1 var2 |
224 #> Symtab.fold (fn (a, net) => |
224 #> Symtab.fold (fn (a, net) => |
225 subtr (if_none (Symtab.lookup atoms1 a) emptynet) net) atoms2 |
225 subtr (the_default emptynet (Symtab.lookup atoms1 a)) net) atoms2 |
226 in subtr net1 net2 [] end; |
226 in subtr net1 net2 [] end; |
227 |
227 |
228 fun entries net = subtract (K false) empty net; |
228 fun entries net = subtract (K false) empty net; |
229 |
229 |
230 |
230 |