static L wrapAsVirtualReversedList(A[] array) {
int n = l(array);
ret new RandomAccessAbstractList {
public int size() { ret n; }
public A get(int i) { ret array[n-1-i]; }
public A set(int i, A a) {
A old = array[n-1-i];
array[n-1-i] = a;
ret old;
}
};
}