public virtual ATermList insertAt(ATerm el, int i) { if (0 > i || i > length) { throw new ArgumentException("illegal list index: " + i); } if (i == 0) { return(insert(el)); } return(next.insertAt(el, i - 1).insert(first)); }