1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package io.github.prolobjectlink.prolog.tuprolog;
23
24 import static io.github.prolobjectlink.prolog.PrologTermType.STRUCTURE_TYPE;
25
26 import alice.tuprolog.Struct;
27 import alice.tuprolog.Term;
28 import io.github.prolobjectlink.prolog.PrologProvider;
29 import io.github.prolobjectlink.prolog.PrologStructure;
30 import io.github.prolobjectlink.prolog.PrologTerm;
31
32
33
34
35
36
37 final class TuPrologStructure extends TuPrologTerm implements PrologStructure {
38
39 TuPrologStructure(PrologProvider provider, String functor, PrologTerm... arguments) {
40 super(STRUCTURE_TYPE, provider);
41 Term[] terms = new Term[arguments.length];
42 for (int i = 0; i < arguments.length; i++) {
43 terms[i] = ((TuPrologTerm) arguments[i]).value;
44 }
45 value = new Struct(removeQuoted(functor), terms);
46 }
47
48 TuPrologStructure(PrologProvider provider, String functor, Term... arguments) {
49 super(STRUCTURE_TYPE, provider);
50 value = new Struct(removeQuoted(functor), arguments);
51 }
52
53 TuPrologStructure(PrologProvider provider, PrologTerm left, String operator, PrologTerm right) {
54 super(STRUCTURE_TYPE, provider);
55 Term leftOperand = ((TuPrologTerm) left).value;
56 Term rightOperand = ((TuPrologTerm) right).value;
57 value = new Struct(operator, new Term[] { leftOperand, rightOperand });
58 }
59
60 TuPrologStructure(PrologProvider provider, Term left, String functor, Term right) {
61 super(STRUCTURE_TYPE, provider, new Struct(functor, new Term[] { left, right }));
62 }
63
64 public PrologTerm getArgument(int index) {
65 checkIndex(index, getArity());
66 return getArguments()[index];
67 }
68
69 public PrologTerm[] getArguments() {
70 Struct structure = (Struct) value;
71 int arity = structure.getArity();
72 PrologTerm[] arguments = new PrologTerm[arity];
73 for (int i = 0; i < arity; i++) {
74 arguments[i] = toTerm(structure.getArg(i), PrologTerm.class);
75 }
76 return arguments;
77 }
78
79 public int getArity() {
80 Struct structure = (Struct) value;
81 return structure.getArity();
82 }
83
84 public String getFunctor() {
85 Struct structure = (Struct) value;
86 return structure.getName();
87 }
88
89 public final PrologTerm getRight() {
90 return getArgument(1);
91 }
92
93 public final PrologTerm getLeft() {
94 return getArgument(0);
95 }
96
97 public final String getOperator() {
98 return getFunctor();
99 }
100
101 }