Esempio n. 1
0
File: Utils.cpp Progetto: yzf/Parser
/**
 * 比较两个term是否相同
 * @param _lhs
 * @param _rhs
 * @return bool
 */
bool Utils::compareTerm(const _term* _lhs, const _term* _rhs) {
    assert(_lhs);
    assert(_rhs);

    if (_lhs->term_type != _rhs->term_type) {
        return false;
    }

    int k;
    switch (_lhs->term_type)
    {
    case VARI:
        return (_lhs->variable_id == _rhs->variable_id);
    case FUNC:
        if (_lhs->function_id == _rhs->function_id) {
            k = Vocabulary::instance().getFunctionArity(_lhs->function_id) - 1;
            assert(k < 0 || _lhs->parameters);
            assert(k < 0 || _rhs->parameters);
            for ( ; k >= 0; -- k) {
                if (! compareTerm(_lhs->parameters + k, _rhs->parameters + k)) {
                    return false;
                }
            }
            return true;
        }
    default:
        assert(0);
    }
    return false;
}
Esempio n. 2
0
File: Utils.cpp Progetto: yzf/Parser
/**
 * 比较两条公式是否相同
 * @param _lhs
 * @param _rhs
 * @return bool
 */
bool Utils::compareFormula(const _formula* _lhs, const _formula* _rhs) {
    assert(_lhs);
    assert(_rhs);

    if (_lhs->formula_type!=_rhs->formula_type) {
        return false;
    }
    int k;
    switch (_lhs->formula_type) {
    case ATOM:
        if (_lhs->predicate_id!=_rhs->predicate_id) {
            return false;
        }
        k = Vocabulary::instance().getPredicateArity(_lhs->predicate_id) - 1;
        assert(k < 0 || _lhs->parameters);
        assert(k < 0 || _rhs->parameters);
        for ( ; k >= 0; -- k) {
            if (! compareTerm(_lhs->parameters + k,_rhs->parameters + k)) {
                return FALSE;
            }
        }
        return true;
    case UNIV:
    case EXIS:
        if (_lhs->variable_id!=_rhs->variable_id) {
            return false;
        }
    case NEGA:
        assert(_lhs->subformula_l);
        assert(_rhs->subformula_l);
        return compareFormula(_lhs->subformula_l,_rhs->subformula_l);
    case CONJ:
    case DISJ:
    case IMPL:
        assert(_lhs->subformula_l);
        assert(_rhs->subformula_l);
        assert(_lhs->subformula_r);
        assert(_rhs->subformula_r);
        return (compareFormula(_lhs->subformula_l,_rhs->subformula_l)
            && compareFormula(_lhs->subformula_r,_rhs->subformula_r));
    default:
        assert(0);
    }
    return false;
}
Esempio n. 3
0
File: array.c Progetto: fmccabe/cafe
comparison sliceCmp(specialClassPo cl, termPo o1, termPo o2) {
  listPo l1 = C_LIST(o1);
  listPo l2 = C_LIST(o2);
  integer s1 = listSize(l1);
  integer s2 = listSize(l2);

  integer sz = minimum(s1, s2);

  for (integer ix = 0; ix < sz; ix++) {
    termPo e1 = nthEl(l1, ix);
    termPo e2 = nthEl(l2, ix);

    comparison cmp = compareTerm(e1, e2);
    if (cmp != same)
      return cmp;
  }
  if (s1 < s2)
    return smaller;
  else if (s1 > s2)
    return bigger;
  else
    return same;
}
Esempio n. 4
0
File: turm.c Progetto: fmccabe/cafe
logical sameTerm(termPo t1, termPo t2) {
  return (logical) (compareTerm(t1, t2) == same);
}
Esempio n. 5
0
File: cell.c Progetto: fmccabe/cafe
comparison cellCmp(specialClassPo cl, termPo o1, termPo o2) {
  cellPo c1 = C_CELL(o1);
  cellPo c2 = C_CELL(o2);
  return compareTerm(c1->content, c2->content);
}