Re: implementing a stack
- To: mathgroup at smc.vnet.net
- Subject: [mg16000] Re: [mg15922] implementing a stack
- From: BobHanlon at aol.com
- Date: Fri, 19 Feb 1999 03:27:12 -0500
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 2/18/99 5:44:21 AM, wself at viking.emcmt.edu writes:
>I would like to implement a simple stack in Mathematica.
>I can use PrependTo for "push", but in that case how do
>I implement "pop"? I have thought about this and I see
>that I can do it by creating a global variable that keeps
>a list of pairs: the symbols that serve as the names
>of the stacks, and the stacks themselves; and having pop
>and push access and manipulate this list. Is that really
>what I have to do?
>
>Explicitly,
>push[a, 1] should push the number 1 onto the stack a, and
>return nothing,
>and
>pop[a] should return whatever is on the top of stack a, and
>reset a to be the rest of the stack.
>
Will,
try this:
Clear[push, pop];
SetAttributes[{push, pop}, HoldFirst]
push[theStack_, elem_] := (theStack = {elem};) /; Length[theStack] == 0;
push[theStack_, elem_] := (theStack = Prepend[theStack, elem];);
pop[theStack_] := Null /; Length[theStack] == 0;
pop[theStack_] := Module[{frst = First[theStack]},
theStack = Rest[theStack]; frst];
Bob Hanlon