@Override public boolean isGround() { return areGroundTerms(getArguments()); } }
@Override public ImmutableExpression getImmutableExpression(OperationPredicate functor, ImmutableList<? extends ImmutableTerm> arguments) { if (GroundTermTools.areGroundTerms(arguments)) { return new GroundExpressionImpl(functor, (ImmutableList<GroundTerm>)arguments); } else { return new NonGroundExpressionImpl(functor, arguments); } }
@Override public ImmutableExpression getImmutableExpression(OperationPredicate functor, ImmutableList<? extends ImmutableTerm> arguments) { if (GroundTermTools.areGroundTerms(arguments)) { return new GroundExpressionImpl(functor, (ImmutableList<GroundTerm>)arguments); } else { return new NonGroundExpressionImpl(functor, arguments); } }
@Override public ImmutableFunctionalTerm getImmutableFunctionalTerm(Predicate functor, ImmutableList<ImmutableTerm> terms) { if (functor instanceof OperationPredicate) { return getImmutableExpression((OperationPredicate)functor, terms); } if (GroundTermTools.areGroundTerms(terms)) { return new GroundFunctionalTermImpl(functor, terms); } else { // Default constructor return new NonGroundFunctionalTermImpl(functor, terms); } }
@Override public ImmutableFunctionalTerm getImmutableFunctionalTerm(FunctionSymbol functor, ImmutableList<? extends ImmutableTerm> terms) { if (functor instanceof OperationPredicate) { return getImmutableExpression((OperationPredicate)functor, terms); } if (GroundTermTools.areGroundTerms(terms)) { return new GroundFunctionalTermImpl((ImmutableList<? extends GroundTerm>)terms, functor); } else { // Default constructor return new NonGroundFunctionalTermImpl(functor, terms); } }
@Override public DistinctVariableDataAtom getDistinctVariableDataAtom(AtomPredicate predicate, ImmutableList<? extends VariableOrGroundTerm> arguments) { if (isVariableOnly(arguments)) { return new DistinctVariableOnlyDataAtomImpl(predicate, (ImmutableList<Variable>)(ImmutableList<?>)arguments); } else if (GroundTermTools.areGroundTerms(arguments)) { return new GroundDataAtomImpl(predicate, (ImmutableList<GroundTerm>)(ImmutableList<?>)arguments); } else { return new NonGroundDistinctVariableDataAtomImpl(predicate, arguments); } }