def test_unifies(self): self.assertFalse(pyson.unifies(True, 1)) self.assertTrue(pyson.unifies(3, 3.0)) self.assertTrue(pyson.unifies(True, True)) self.assertTrue(pyson.unifies(5, pyson.Wildcard())) self.assertTrue(pyson.unifies((1, 2), (1, pyson.Wildcard()))) self.assertTrue(pyson.unifies(("hello", 2), ("hello", pyson.Var()))) self.assertTrue(pyson.unifies(pyson.Var(), pyson.Literal("beep"))) self.assertTrue(pyson.unifies(pyson.Literal("boop"), pyson.Var())) X = pyson.Var() self.assertTrue( pyson.unifies(pyson.Literal("foo", (X, X)), pyson.Literal("foo", (1, 1)))) self.assertFalse( pyson.unifies(pyson.Literal("bar", (X, X)), pyson.Literal("bar", (1, 2))))
def visit_variable(self, ast_variable): try: return self.variables[ast_variable.name] except KeyError: if ast_variable.name == "_": var = pyson.Wildcard() else: var = pyson.Var() self.variables[ast_variable.name] = var return var
def visit_binary_op(self, ast_binary_op): return pyson.Wildcard()