package org.matheclipse.core.builtin.function;
import org.matheclipse.core.eval.exception.Validate;
import org.matheclipse.core.eval.interfaces.AbstractCoreFunctionEvaluator;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.ISymbol;
/**
* Set the attributes for a symbol
*
*/
public class Attributes extends AbstractCoreFunctionEvaluator {
public Attributes() {
}
/**
*
*/
@Override
public IExpr evaluate(final IAST ast) {
Validate.checkSize(ast, 2);
if (ast.arg1().isSymbol()) {
IAST result = F.List();
final ISymbol sym = ((ISymbol) ast.arg1());
int attributea = sym.getAttributes();
if ((attributea & ISymbol.FLAT) != ISymbol.NOATTRIBUTE) {
result.add(F.Flat);
}
if ((attributea & ISymbol.LISTABLE) != ISymbol.NOATTRIBUTE) {
result.add(F.Listable);
}
if ((attributea & ISymbol.ONEIDENTITY) != ISymbol.NOATTRIBUTE) {
result.add(F.OneIdentity);
}
if ((attributea & ISymbol.ORDERLESS) != ISymbol.NOATTRIBUTE) {
result.add(F.Orderless);
}
if ((attributea & ISymbol.HOLDALL) != ISymbol.NOATTRIBUTE) {
result.add(F.HoldAll);
}
if ((attributea & ISymbol.HOLDFIRST) != ISymbol.NOATTRIBUTE) {
result.add(F.HoldFirst);
}
if ((attributea & ISymbol.HOLDREST) != ISymbol.NOATTRIBUTE) {
result.add(F.HoldRest);
}
if ((attributea & ISymbol.NHOLDALL) != ISymbol.NOATTRIBUTE) {
result.add(F.NHoldAll);
}
if ((attributea & ISymbol.NHOLDFIRST) != ISymbol.NOATTRIBUTE) {
result.add(F.NHoldFirst);
}
if ((attributea & ISymbol.NHOLDREST) != ISymbol.NOATTRIBUTE) {
result.add(F.NHoldRest);
}
if ((attributea & ISymbol.NUMERICFUNCTION) != ISymbol.NOATTRIBUTE) {
result.add(F.NumericFunction);
}
return result;
}
return null;
}
}
Ads help maintain this website.