[pypy-svn] r22444 - pypy/dist/pypy/lib/logic

auc at codespeak.net auc at codespeak.net
Thu Jan 19 16:00:25 CET 2006


Author: auc
Date: Thu Jan 19 16:00:24 2006
New Revision: 22444

Modified:
   pypy/dist/pypy/lib/logic/unification.py
Log:
cleanup


Modified: pypy/dist/pypy/lib/logic/unification.py
==============================================================================
--- pypy/dist/pypy/lib/logic/unification.py	(original)
+++ pypy/dist/pypy/lib/logic/unification.py	Thu Jan 19 16:00:24 2006
@@ -105,13 +105,7 @@
     
     def __init__(self):
         # set of all known vars
-        # var->equivalence set mapping for unbound vars
-        # set of equisets (clusters of unbound variables)
-        # var->objects bindings
         self.vars = set()
-        self.equisets = {}
-        self.unbound = set()
-        #self.bound = {}
         # the transaction flag helps manage the change-list
         # for variables
         self.in_transaction = False
@@ -124,8 +118,6 @@
         self.vars.add(var)
         # put into new singleton equiv. set
         var.val = EqSet([var])
-        #self.equisets[var] = eqset
-        #self.unbound.add(eqset)
 
     #-- BIND -------------------------------------------
 
@@ -174,26 +166,23 @@
         print "unify %s with %s" % (x,y)
         if not _unifiable(x, y): raise UnificationFailure(x, y)
         # dispatch to the apropriate unifier
-        if not isinstance(x, Var):
+        if not x in self.vars:
+            if not y in self.vars:
+                if x != y: raise UnificationFailure(x, y)
             return self._unify_var_val(y, x)
-        if not isinstance(y, Var):
+        if not y in self.vars:
             return self._unify_var_val(x, y)
-        try:
-            if x.is_bound() and y.is_bound():
-                self._unify_bound(x,y)
-            elif x.isbound():
-                self.bind(x,y)
-            else:
-                self.bind(y,x)
-        except AlreadyBound:
-            raise UnificationFailure(x, y)
+        if _both_are_bound(x, y):
+            self._unify_bound(x,y)
+        elif x.isbound():
+            self.bind(x,y)
+        else:
+            self.bind(y,x)
 
     def _unify_var_val(self, x, y):
-        if not x.is_bound():
-            if x != y:
-                self.bind(x, y)
-        else:
-            raise UnificationFailure(x ,y)
+        if x.is_bound(): raise UnificationFailure(x ,y)
+        if x != y:
+            self.bind(x, y)
         
     def _unify_bound(self, x, y):
         print "unify bound %s %s" % (x, y)



More information about the Pypy-commit mailing list