Trivial Prolog in Java

01: package ca.draisey.free.tprolog;
02:
03:
04:
05:
06:
07: // a rule prefix which is essentially a wrapper for the actual quantifier in QuanTerm
08: final class QuantifiedSentence extends Sentence {
09:         QuantifiedSentence( final int n, final QuanTerm t, final Sentence s )
10:         {
11:                 numberofVariables = n;
12:                 variable = t;
13:                 sentence = s;
14:         }
15:
16:         // for pretty output
17:         final void listing( final int f, final Variables these, final java.io.PrintWriter p, final Monitor m )
18:         {
19:                 if( f == 0 ) {
20:                         p.print( "Quantifier( " );
21:                         variable.listing( f, these, p, m );
22:                         p.print( ", " );
23:                         sentence.listing( f, these, p, m );
24:                         p.print( " )" );
25:                 }
26:                 else if( ( f & 1 ) == 0 ) {
27:                         p.print( "(" );
28:                         variable.listing( f, these, p, m );
29:                         p.print( ")" );
30:                         sentence.listing( f, these, p, m );
31:                 }
32:                 else sentence.listing( f, these, p, m );
33:         }
34:
35:         // for ultimate output
36:         final void listVariables( final Variables these, final java.io.PrintWriter p, final Monitor m )
37:         {
38:                 sentence.listVariables( these, p, m );
39:                 listed( these, p, m );
40:                 p.println();
41:         }
42:
43:         // protected private for ultimate output
44:         final boolean hasNextQuantifier() { return true; }
45:         final Sentence nextQuantifier() { return sentence; }
46:         final void listed(  final Variables these, final java.io.PrintWriter p, final Monitor m )
47:         {
48:                 variable.listing( 2, these, p, m );
49:                 p.print( "=" );
50:                 variable.listing( 4, these, p, m );
51:         }
52:         
53:         // creates a new table of unbound Variables
54:         // -- nonrecursize -- only run on the head of a rule
55:         final Variables instantiateVariables()
56:         {
57:                 return new Variables( numberofVariables );
58:         }
59:         // -- part of the instantiation process for stripping unwanted qualifiers
60:         final Clause dequantifyClause() { return sentence.dequantifyClause(); }
61:         final Term dequantifyTerm() { return sentence.dequantifyTerm(); }
62:
63:         // a helper function for indexing the database -- pass this down
64:         final String getkey() {
65:                 return sentence.getkey();
66:         }
67:
68:         // the Quantifier node structure
69:         private final int numberofVariables;
70:         private final QuanTerm variable;
71:         private final Sentence sentence;
72: }
73:
74: // fin