public function testIsVariableEquals() { $var = variable(1); $var2 = variable(1); $var3 = variable(2); $this->assertTrue(isVariableEquals($var, $var2)); $this->assertFalse(isVariableEquals($var2, $var3)); }
/** * Unifies two terms in a substitution. * * @param Variable $u a variable * @param mixed $v a term * @param Cons $s the substitution */ function unify($u, $v, $s) { $u = walk($u, $s); $v = walk($v, $s); if (isVariable($u) && isVariable($v) && isVariableEquals($u, $v)) { return $s; } elseif (isVariable($u)) { return extS($u, $v, $s); } elseif (isVariable($v)) { return extS($v, $u, $s); } elseif (isPair($u) && isPair($v)) { $s = unify(car($u), car($v), $s); if ($s) { return unify(cdr($u), cdr($v), $s); } } elseif ($u === $v) { return $s; } }