ImmutableList<Optional<TermType>> argumentTypes = expression.getTerms().stream() .map(t -> getCastTypeFromSubRule(t, bodyDataAtoms, alreadyKnownCastTypes)) .map(Optional::of) .collect(ImmutableCollectors.toList()); return expression.getOptionalTermType(argumentTypes) .orElseThrow(() -> new IllegalStateException("No type could be inferred for " + term));
/** * TODO: generalize */ default Optional<TermType> getOptionalTermType() throws IncompatibleTermException { try { OperationPredicate predicate = getFunctionSymbol(); return predicate.getTermTypeInferenceRule().inferType( getTerms(), predicate.getArgumentTypes()); } catch (IncompatibleTermException e) { throw new IncompatibleTermException(this, e); } }
return ((Expression) f).getOptionalTermType();
@Override public ImmutableExpression getImmutableExpression(Expression expression) { if (GroundTermTools.isGroundTerm(expression)) { return new GroundExpressionImpl(expression.getFunctionSymbol(), (ImmutableList<? extends GroundTerm>)(ImmutableList<?>)convertTerms(expression)); } else { return new NonGroundExpressionImpl(expression.getFunctionSymbol(), convertTerms(expression)); } }
default Optional<TermType> getOptionalTermType(ImmutableList<Optional<TermType>> actualArgumentTypes) { try { OperationPredicate predicate = getFunctionSymbol(); return predicate.getTermTypeInferenceRule().inferTypeFromArgumentTypes( actualArgumentTypes, predicate.getArgumentTypes()); } catch (IncompatibleTermException e) { throw new IncompatibleTermException(this, e); } } }
ImmutableList<Optional<TermType>> argumentTypes = expression.getTerms().stream() .map(t -> getCastTypeFromSubRule(t, bodyDataAtoms, alreadyKnownCastTypes)) .map(Optional::of) .collect(ImmutableCollectors.toList()); return expression.getOptionalTermType(argumentTypes) .orElseThrow(() -> new IllegalStateException("No type could be inferred for " + term));