示例#1
0
 public function testIsVariableEquals()
 {
     $var = variable(1);
     $var2 = variable(1);
     $var3 = variable(2);
     $this->assertTrue(isVariableEquals($var, $var2));
     $this->assertFalse(isVariableEquals($var2, $var3));
 }
示例#2
0
/**
 * 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;
    }
}