Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  // ----------------------------------------------------------------------------
  // Copyright (C) 2003 Rafael H. Bordini, Jomi F. Hubner, et al.
  // 
  // This library is free software; you can redistribute it and/or
  // modify it under the terms of the GNU Lesser General Public
  // License as published by the Free Software Foundation; either
  // version 2.1 of the License, or (at your option) any later version.
  // 
  // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 // Lesser General Public License for more details.
 // 
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 // 
 // To contact the authors:
 // http://www.inf.ufrgs.br/~bordini
 // http://www.das.ufsc.br/~jomi
 //
 //----------------------------------------------------------------------------
 
 package jason.asSyntax;
 
 
 
Represents a relational expression like 10 > 20. When the operator is =.., the first argument is a literal and the second as list, e.g.: Literal =.. [functor, list of terms, list of annots] Examples:
  • X =.. [~p, [t1, t2], [a1,a2]]
    X is ~p(t1,t2)[a1,a2]
  • ~p(t1,t2)[a1,a2] =.. X
    X is [~p, [t1, t2], [a1,a2]]

Author(s):
Jomi
Navassoc:
- op - RelationalOp
 
 public class RelExpr extends BinaryStructure implements LogicalFormula {
 
     private static final long serialVersionUID = 1L;
     private static Logger logger = Logger.getLogger(RelExpr.class.getName());
 
     public enum RelationalOp { 
         none   { public String toString() { return ""; } }, 
         gt     { public String toString() { return " > "; } }, 
         gte    { public String toString() { return " >= "; } },
         lt     { public String toString() { return " < "; } }, 
         lte    { public String toString() { return " <= "; } },
         eq     { public String toString() { return " == "; } },
         dif    { public String toString() { return " \\== "; } },
         unify          { public String toString() { return " = "; } },
         literalBuilder { public String toString() { return " =.. "; } };
     }
 
     private RelationalOp op = .;
 
     public RelExpr(Term t1RelationalOp operTerm t2) {
         super(t1,oper.toString(),t2);
          = oper;
     }
     
     public Iterator<UnifierlogicalConsequence(final Agent agUnifier un) {
         Term xp = getTerm(0).clone();
         Term yp = getTerm(1).clone();
         xp.apply(un);
         yp.apply(un);
 
         switch () {
         
         case  : if (xp.compareTo(yp)  >  0) return LogExpr.createUnifIterator(un);  break;
         case if (xp.compareTo(yp)  >= 0) return LogExpr.createUnifIterator(un);  break;
         case  : if (xp.compareTo(yp)  <  0) return LogExpr.createUnifIterator(un);  break;
         case if (xp.compareTo(yp)  <= 0) return LogExpr.createUnifIterator(un);  break;
         case  : if (xp.equals(yp))          return LogExpr.createUnifIterator(un);  break;
         case if (!xp.equals(yp))         return LogExpr.createUnifIterator(un);  break;
         case if (un.unifies(xp,yp))    return LogExpr.createUnifIterator(un);  break
 
         case 
            try {
                Literal  p = (Literal)xp;  // lhs clone
                ListTerm l = (ListTerm)yp// rhs clone
                //logger.info(p+" test "+l+" un="+un); 
                // both are not vars, using normal unification
                if (!p.isVar() && !l.isVar()) {
                    if (un.unifies(p.getAsListOfTerms(), l)) {
                        return LogExpr.createUnifIterator(un);
                    }
                } else {
                
                    // first is var, second is list, var is assigned to l transformed in literal
                    if (p.isVar() && l.isList() && un.unifies(p, Literal.newFromListOfTerms(l))) {
                        return LogExpr.createUnifIterator(un);
                    }
                    
                    // first is literal, second is var, var is assigned to l transformed in list
                    if (p.isLiteral() && l.isVar() && un.unifies(p.getAsListOfTerms(), l)) {
                        return LogExpr.createUnifIterator(un);
                    }
                    // both are vars, error
                    .log(."Both arguments of "+getTerm(0)+" =.. "+getTerm(1)+" are variables!");
                }
            } catch (Exception e) {
                .log(."The arguments of operator =.. are not Literal and List."e);
            }
            break;
        }
        
        return ..iterator();  // empty iterator for unifier
    }   

    
returns some LogicalFormula that can be evaluated
    public static LogicalFormula parseExpr(String sExpr) {
        as2j parser = new as2j(new StringReader(sExpr));
        try {
            return (LogicalFormula)parser.rel_expr();
        } catch (Exception e) {
            .log(.,"Error parsing expression "+sExpr,e);
        }
        return null;
    }
    
    
make a hard copy of the terms
    public LogicalFormula clone() {
        return  new RelExpr(getTerm(0).clone(), getTerm(1).clone());
    }
    
    
gets the Operation of this Expression
    public RelationalOp getOp() {
        return ;
    }
    
get as XML
    public Element getAsDOM(Document document) {
        Element u = super.getAsDOM(document);
        u.setAttribute("type","relational");
        return u;
    }
New to GrepCode? Check out our FAQ X