public final static void sort(final IAST list, Comparator<IExpr> comparator) { list.args().sort(comparator); }
@Override public IExpr evaluate(final IAST ast) { Validate.checkSize(ast, 3); if (!ast.get(1).isAtom() && !ast.get(2).isAtom()) { final IAST result = F.List(); ((IAST) ast.get(1)).args().union(result, ((IAST) ast.get(2)).args()); return result.args().sort(ExprComparator.CONS); } return null; }
@Override public IExpr evaluate(final IAST ast) { Validate.checkSize(ast, 3); if (!ast.get(1).isAtom() && !ast.get(2).isAtom()) { final IAST result = F.List(); ((IAST) ast.get(1)).args().intersection(result, ((IAST) ast.get(2)).args()); return result.args().sort(ExprComparator.CONS); } return null; }
@Override public IExpr evaluate(final IAST functionList) { if (functionList.size() != 3) { return null; } if (!functionList.get(1).isAtom() && !functionList.get(2).isAtom()) { final IAST result = F.List(); ((IAST) functionList.get(1)).args().complement(result, ((IAST) functionList.get(2)).args()); return result.args().sort(ExprComparator.CONS); } return null; } }
/** * Sort the list [i.e. the list getHeader() has the attribute * ISymbol.ORDERLESS] example: suppose the Symbol s has the attribute * ISymbol.ORDERLESS f[z,d,a,b] ==> f[a,b,d,z] * * @param session * @param list * @return returns the sorted list */ public final static void sort(final IAST ast) { if ((ast.getEvalFlags() & IAST.IS_SORTED) == IAST.IS_SORTED) { // already sorted return; } final int astSize = ast.size(); if (astSize > 2) { if (astSize == 3) { // optimize special case if (ast.get(1).compareTo(ast.get(2)) > 0) { // swap arguments IExpr temp = ast.get(2); ast.set(2, ast.get(1)); ast.set(1, temp); } } else { ast.args().sort(ExprComparator.CONS); } } ast.setEvalFlags(IAST.IS_SORTED); }