@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 2); int[] dim = ast.arg1().isMatrix(); if (dim == null && ast.arg1().isListOfLists()) { return F.NIL; } if (dim != null) { IAST matrix = (IAST) ast.arg1(); return matrix.mapMatrixColumns(dim, x -> F.MeanDeviation(x)); } int length = ast.arg1().isVector(); if (length > 0) { IAST vector = (IAST) ast.arg1(); int size = vector.size(); IASTAppendable sum = F.PlusAlloc(size); final IExpr mean = F.eval(F.Mean(F.Negate(vector))); vector.forEach(x -> sum.append(F.Abs(F.Plus(x, mean)))); return F.Times(F.Power(F.ZZ(size - 1), -1), sum); } return F.NIL; }