sequence stacks = {} integer freelist = 0 function new_stack() integer res = freelist if res!=0 then freelist = stacks[freelist] stacks[res] = {} else stacks = append(stacks,{}) res = length(stacks) end if return res end function procedure free_stack(integer sid) stacks[sid] = freelist freelist = sid end procedure procedure push(integer sid, object what) stacks[sid] = append(stacks[sid],what) end procedure function pop(integer sid) object res = stacks[sid][$] stacks[sid] = stacks[sid][1..$-1] return res end function function empty(integer sid) return length(stacks[sid])=0 end function integer sid = new_stack() ?empty(sid) -- 1 push(sid,5) ?empty(sid) -- 0 push(sid,6) ?pop(sid) -- 6 ?pop(sid) -- 5 ?empty(sid) -- 1 free_stack(sid)