001: /*
002: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018: package org.mandarax.kernel;
019:
020: import org.mandarax.util.TermIterator;
021: import java.util.*;
022:
023: /**
024: * A term is either a variable, a name or a compound term containing a function.
025: * Note that instances are usually created using a factory.
026: * @see org.mandarax.kernel.LogicFactory
027: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
028: * @version 3.4 <7 March 05>
029: * @since 1.0
030: * Prova re-integration modifications
031: * @author <A HREF="mailto:a.kozlenkov@city.ac.uk">Alex Kozlenkov</A>
032: * @version 3.4 <7 March 05>
033: */
034: public interface Term extends SemanticsSupport, java.io.Serializable {
035:
036: /**
037: * Get a term iterator for the subterms.
038: * @return an iterator for all subterms
039: */
040: TermIterator allSubterms();
041:
042: /**
043: * Apply a substitution to a term.
044: * @return the term resulting from applying the replacement
045: * @param r a replacement
046: */
047: Term apply(Replacement r);
048:
049: /**
050: * Indicates whether the term containes variables.
051: * @return true if the term contains variables, false otherwise
052: */
053: public boolean containsVariables();
054:
055: /**
056: * Indicates whether the term contains the provided variable term.
057: * @return true if the term contains the variable term provided, false otherwise
058: * @param var a variable term
059: */
060: public boolean containsVariable(VariableTerm var);
061:
062: /**
063: * Get all subterms as array.
064: * @return an array of all subterms
065: */
066: Term[] getAllSubterms();
067:
068: void getAllSubtermsA(List result);
069:
070: void getAllSubtermsA(List result, boolean left);
071:
072: public boolean getAllSubtermsB(List result, Iterator aux);
073:
074: public boolean getAllSubtermsB(List result, Iterator aux,
075: boolean left);
076:
077: /**
078: * Get the type of the term.
079: * @return the type of the term
080: */
081: Class getType();
082:
083: /**
084: * Indicates whether the term is compound.
085: * @return true if this is a compound term, false otherwise
086: */
087: public boolean isCompound();
088:
089: /**
090: * Indicates whether the term is a constant.
091: * @return true if this is a constant term, false otherwise
092: */
093: public boolean isConstant();
094:
095: /**
096: * Indicates whether the term is a variable.
097: * @return true if this is a variable term, false otherwise
098: */
099: public boolean isVariable();
100:
101: /**
102: * Resolve a term. This operation is most meaningfull for
103: * complex terms : if supported, the function should be performed using its semantic.
104: * <br>
105: * In version 3.2, a session parameter has been added. A session provides a context that
106: * allows to "resolve" terms locally, i.e., w.r.t. an InferenceEngine session.
107: * Most implementations can ignore this parameter.
108: * @param session a session object
109: * @see org.mandarax.kernel.ComplexTerm#resolve
110: * @return the result of resolving the term
111: * @throws java.lang.UnsupportedOperationException
112: * @throws java.lang.IllegalArgumentException
113: */
114: Object resolve(Session session)
115: throws UnsupportedOperationException,
116: IllegalArgumentException;
117:
118: // /**
119: // * Prova version taken from older Mandarax.
120: // * Resolve a term. This operation is most meaningfull for
121: // * complex terms : if supported, the function
122: // * should be performed using its semantic.
123: // * @see org.mandarax.kernel.ComplexTerm#resolve
124: // * @return the result of resolving the term
125: // * @throws java.lang.UnsupportedOperationException
126: // * @throws java.lang.IllegalArgumentException
127: // */
128: // Object resolve()
129: // throws UnsupportedOperationException, IllegalArgumentException;
130:
131: /**
132: * Indicates whether the object is the same as the parameter.
133: * @return boolean
134: * @param t org.mandarax.kernel.Term
135: */
136: boolean sameAs(Term t);
137: }
|