class List { // container for the list's elements var a: array; // size of the list var size: nat; constructor init(len:int) { a := new int[len]; size := 0; } method snoc(e: int) { a[size] := e; size := size + 1; } method cons(val:int) { var i:int := size; while (i > 0) { a[i] := a[i-1]; i := i - 1 ; } a[0] := val; size := size + 1; } method tail() { var i:int := 0; while (i < size-1) { a[i] := a[i + 1]; i := i + 1; } size := size - 1; } method head() returns (h:int) { h := a[0] ; } }