public override int Eval(Stack st) { int narg = GetNarg(st); var x = GetAlgebraic(st); var index_in = CreateVector.Create(st); if (index_in.IsConstant()) { var mx = new Matrix(( Algebraic )x); var idx = Index.createIndex(index_in, mx); mx = mx.Extract(idx); x = mx.Reduce(); } else { var mr = new MatRef(( Algebraic )x); x = new Polynomial(new FunctionVariable("MR(" + x + ")", index_in, mr)); } st.Push(x); return(0); }