Package stanfordlogic.prover

Source Code of stanfordlogic.prover.Term

///////////////////////////////////////////////////////////////////////
//                        STANFORD LOGIC GROUP                       //
//                    General Game Playing Project                   //
//                                                                   //
// Sample Player Implementation                                      //
//                                                                   //
// (c) 2007. See LICENSE and CONTRIBUTORS.                           //
///////////////////////////////////////////////////////////////////////

/**
*
*/
package stanfordlogic.prover;

import java.util.HashMap;
import java.util.Map;

import stanfordlogic.gdl.GdlAtom;
import stanfordlogic.gdl.GdlExpression;
import stanfordlogic.gdl.GdlList;
import stanfordlogic.gdl.GdlVariable;
import stanfordlogic.gdl.SymbolTable;
import stanfordlogic.game.GameManager;


/**
*
* @author Based on code by Team Camembert: David Haley, Pierre-Yves Laligand
*/
public abstract class Term implements Comparable<Term>
{
    @Override
    public final String toString()
    {
        return toString(GameManager.getSymbolTable());
    }
    public abstract String toString(SymbolTable symtab);
   
    public int compareTo( Term t )
    {
        if ( t instanceof TermObject )
            return this.compareTo((TermObject) t);
        else if ( t instanceof TermFunction )
            return this.compareTo((TermFunction) t);
        else
            return this.compareTo((TermVariable) t);
    }
   
    @Override
    public abstract Term clone();
   
    public abstract Term applySubstitution( Substitution sigma );
   
    /**
     * Get the total number of columns needed to represent this term.
     * Objects and variables only need one column: the name of the term. Term functions
     * need one column for their name, and then the sum of the needed columns for each
     * of their arguments.
     *
     * @return The total number of columns needed to represent this term.
     */
    public abstract int getTotalColumns();
   
   
    protected abstract int compareTo(TermObject t);
    protected abstract int compareTo(TermFunction t);
    protected abstract int compareTo(TermVariable t);
   
    public abstract boolean hasVariables();
   
    public abstract boolean hasTermFunction(int functionName);
    public abstract boolean hasVariable(int varName);
   
    public abstract boolean canMapVariables(Term other, Map<TermVariable,TermVariable> varMap);
   
    public abstract Term uniquefy(Map<TermVariable,TermVariable> newVarMap);
   
    public abstract boolean mgu(Term t, Substitution subsSoFar);
   
    ////////////////////////////////////////////////////////////////////////////
   
    public static Term buildFromGdl(GdlExpression expression)
    {
        return buildFromGdl(expression, new HashMap<GdlVariable, TermVariable>() );
    }
   
    public static Term buildFromGdl(GdlExpression expression, Map<GdlVariable, TermVariable> varMap)
    {
        if ( expression instanceof GdlAtom )
        {
            return TermObject.makeTermObject( ((GdlAtom) expression).getToken() );
        }
        else if ( expression instanceof GdlList )
        {
            GdlList list = (GdlList) expression;
           
            // Grab the function name
            int name = ((GdlAtom) list.getElement(0)).getToken();
           
            // Convert each term
            Term [] terms = new Term [list.getArity()];
           
            for ( int i = 0; i < list.getArity(); i++ )
            {
                GdlExpression elem = list.getElement(i+1);
               
                if ( elem instanceof GdlVariable == false)
                    terms[i] = Term.buildFromGdl(elem, varMap);
                else
                {
                    /*TermVariable termVar = varMap.get(elem);
                   
                    if ( termVar == null )
                    {
                        termVar = TermVariable.makeTermVariable();
                        varMap.put( (GdlVariable) elem, termVar);
                    }*/
                    TermVariable termVar = new TermVariable(((GdlVariable) elem).getToken());
                   
                    terms[i] = termVar;
                }
            }
           
            return new TermFunction(name, terms);
        }
        else
        {
            throw new IllegalArgumentException(
                    "Term.buildFromGdl: cannot handle GDL of type "
                    + expression.getClass().getName() );
        }
    }
}
TOP

Related Classes of stanfordlogic.prover.Term

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.