src/Pure/net.ML
changeset 18939 18e2a2676d80
parent 17412 e26cb20ef0cc
child 19482 9f11af8f7ef9
equal deleted inserted replaced
18938:b401ee1cda14 18939:18e2a2676d80
    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