(* ------------------------------- STI: Stack of Int basic LIFO list ------------------------------- *) datatype STI = New | push of STI * int ; fun size (New) = 0 | size (push(S,i)) = size(S)+1; fun pop (New) = New | pop (push(S,i)) = S ; fun empty (New) = true | empty (S) = (size(S)=0) ; exception topEmptyStack; fun top (New) = raise topEmptyStack | top (push(S,i)) = i ; (*== test stacks =====================*) val b1 = push(New,1); val b2 = push(b1,2); val b3 = push(b2,3); val b4 = push(b3,4); val b5 = push(b4,5); val b6 = push(b5,6); val s1 = push(push(push(pop(push(b6,100)),41),31),21) ; empty(b1); empty(b6); size(b1); size(b6); size(push(b3,17); (* etc. *)