Functional Stacks

Denys Duchier

module
x-oz://system/adt/Stack.ozf

This module provides a functional implementation of stacks

Exports

The module exports the following constructors:

{Stack.new ?S}
returns a new functional stack instance S, currently empty
{Stack.newFromList +L ?S}
returns a new functional stack instance S initialized with the elements of list L

Instance API

Each functional stack instance S has the following features:

{S.get ?V}
returns the next value V available from S, or raises exception empty if none
{S.put +V}
pushes a new value V onto the stack
{S.getPut ?Old +New}
atomically, gets the next value Old available from S and pushes the value New. If S was empty, New is Old and S is still empty
{S.top ?V}
returns the value V available on top of S without actually removing it
{S.toList ?L}
returns the list L of all values in S
{S.toListKill ?L}
returns the list L of all values in S and makes S unusable until a subsequent {S.reset}.
{S.isEmpty ?B}
returns true iff S is empty
{S.reset}
discards S's content and resets it to an empty stack
{S.clone ?S2}
returns a new functional queue instance S2 which is a clone of S