protected AbstractFunction(@Nonnull String name, Generic[] parameters) { super(name); checkParameters(parameters); this.parameters = parameters; }
public Generic factorize() { final AbstractFunction function = newFactorizedFunction(); return function.expressionValue(); }
private void checkParameters(@Nullable Generic[] parameters) { assert parameters == null || (getMinParameters() <= parameters.length && parameters.length <= getMaxParameters()); }
public Generic elementary() { final AbstractFunction function = newElementarizedFunction(); return function.selfElementary(); }
public Generic substitute(@Nonnull Variable variable, @Nonnull Generic generic) { final AbstractFunction function = (AbstractFunction) newInstance(); for (int i = 0; i < parameters.length; i++) { function.parameters[i] = parameters[i].substitute(variable, generic); } if (function.isIdentity(variable)) { return generic; } else { return function.selfExpand(); } }
public int getMaxParameters() { return getMinParameters(); }
@Nonnull protected final String formatParameter(int i) { Generic parameter = parameters[i]; String result; if (parameter != null) { result = parameter.toString(); } else { result = formatUndefinedParameter(i); } return result; }
public String toString() { final StringBuilder result = new StringBuilder(); // f(x, y, z) result.append(name); result.append("("); for (int i = 0; i < parameters.length; i++) { result.append(formatParameter(i)); if (i < parameters.length - 1) { result.append(", "); } } result.append(")"); return result.toString(); }
@Override public void copy(@Nonnull MathEntity that) { super.copy(that); if (that instanceof Function) { if (((Function) that).parameters != null) { this.parameters = ParserUtils.copyOf(((Function) that).parameters); } else { this.parameters = null; } } }
public void toMathML(MathML element, Object data) { int exponent = data instanceof Integer ? (Integer) data : 1; MathML result; if (exponent == 1) { nameToMathML(element); } else { result = element.element("msup"); nameToMathML(result); MathML e2 = element.element("mn"); e2.appendChild(element.text(String.valueOf(exponent))); result.appendChild(e2); element.appendChild(result); } result = element.element("mfenced"); for (Generic parameter : parameters) { parameter.toMathML(result, null); } element.appendChild(result); }
public void setParameters(@Nullable Generic[] parameters) { checkParameters(parameters); this.parameters = parameters; }