01: package org.mandarax.kernel;
02:
03: /*
04: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: */
20:
21: /**
22: * Interface representing facts. Instances are usually created using
23: * a factory. Note that we use facts also as prerequisites and conclusion(s)
24: * in rules.
25: * @see org.mandarax.kernel.Rule
26: * @see org.mandarax.kernel.LogicFactory
27: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
28: * @version 3.4 <7 March 05>
29: * @since 1.0
30: */
31: public interface Fact extends Clause, TermContainer {
32:
33: /**
34: * Apply a set of replacements to a fact. Returns a new fact!
35: * @see org.mandarax.kernel.Replacement
36: * @return the fact that is the result of the application of replacements
37: * @param r the collection of replacements
38: */
39: public Fact applyToFact(java.util.Collection r);
40:
41: /**
42: * Apply a single replacement to a fact. Return a new fact!
43: * @return the fact that is the result of the application of the replacement
44: * @param r the replacement applied
45: */
46: public Fact applyToFact(Replacement r);
47:
48: /**
49: * Get a key for fast access. The key is usually the predicate, but subclasses
50: * might want to use different keys. Note that keys are mainly used by inference engines and
51: * knowledge bases to improve performance and inference engine and knowledge bases
52: * must know about the semantics of keys to use them correctly!
53: * @see org.mandarax.kernel.KnowledgeBase
54: * @see org.mandarax.kernel.Clause#getKey
55: * @return the key object
56: */
57: public Object getKey();
58:
59: /**
60: * Get the predicate.
61: * @return the predicate
62: */
63: public org.mandarax.kernel.Predicate getPredicate();
64:
65: /**
66: * Resolve a fact: if supported, the predicate
67: * should be performed using its semantic. E.g., for a fact
68: * like <i>isFather(Max,Jens)</i> the function <i>isFather</i> is performed
69: * for the objects (constant terms) <i>Max</i> and <i>Jens</i> and the result (e.g., <i>true</i>) is returned.
70: * Note that not all predicates support this (since not all predicates
71: * have a semantic), and the operation can also fail
72: * in case one term is variable. In these cases we throw appropriate exceptions.
73: * @see org.mandarax.kernel.Constructor#perform
74: * @param session a session object
75: * @return the resulting object, usually true or false
76: * @throws java.lang.UnsupportedOperationException - thrown if not supported
77: * @throws java.lang.IllegalArgumentException
78: */
79: public Object resolve(Session session)
80: throws UnsupportedOperationException,
81: IllegalArgumentException;
82:
83: /**
84: * Set a new predicate.
85: * @param p the new predicate
86: */
87: public void setPredicate(org.mandarax.kernel.Predicate p);
88:
89: /**
90: * Indicates whether the fact is negated (negation as failure)
91: * @return true if the fact is negated, false otherwise
92: */
93: boolean isNegatedAF();
94:
95: }
|