           res = res &* 31 &+ hash(expr)
         }
         visited.remove(record)
-        return res &* 31 + 20
+        return res &* 31 &+ 20
       case .table(let map):
         if alreadyVisited(map) {
           return 0
         }
         var res = 0
         for (key, value) in map.mappings {
-          res += (hash(key) &* 31) + hash(value)
+          res = res &+ (hash(key) &* 31) &+ hash(value)
         }
         visited.remove(map)
-        return res &* 31 + 21
+        return res &* 31 &+ 21
       case .promise(let promise):
-        return promise.hashValue &* 31 + 22
+        return promise.hashValue &* 31 &+ 22
       case .values(let expr):
-        return hash(expr) &* 31 + 23
+        return hash(expr) &* 31 &+ 23
       case .procedure(let proc):
-        return proc.hashValue &* 31 + 24
+        return proc.hashValue &* 31 &+ 24
       case .special(let special):
-        return special.hashValue &* 31 + 25
+        return special.hashValue &* 31 &+ 25
       case .env(let environment):
-        return environment.hashValue &* 31 + 26
+        return environment.hashValue &* 31 &+ 26
       case .port(let port):
-        return port.hashValue &* 31 + 27
+        return port.hashValue &* 31 &+ 27
       case .error(let err):
-        return err.hashValue &* 31 + 28
+        return err.hashValue &* 31 &+ 28
     }
   }
   

      case .bignum(let num):
        return num.hashValue &* 31 &+ 8
      case .rational(let n, let d):
        return ((hash(n) &* 31) &+ hash(d)) &* 31 + 9
      case .flonum(let num):
        return num.hashValue &* 31 &+ 11
      case .complex(let num):

    case .table(let map):
      return map.hashValue &* 31 &+ 21
    case .promise(let promise):
      return promise.hashValue &* 31 &+ 22
    case .values(let expr):
      return eqvHash(expr) &* 31 &+ 23
    case .procedure(let proc):
      return proc.hashValue &* 31 &+ 24
    case .special(let special):
      return special.hashValue &* 31 &+ 25
    case .env(let environment):
      return environment.hashValue &* 31 &+ 26
    case .port(let port):
      return port.hashValue &* 31 &+ 27
    case .error(let err):
      return err.hashValue &* 31 &+ 28
  }
}

