[R] push/pop on a stack

Barry Rowlingson B.Rowlingson at lancaster.ac.uk
Tue Feb 25 19:11:04 CET 2003


> It seems like it wouldn't be difficult, and that someone may have already
> implemented a set of stack functions, and I wouldn't like to duplicate it.

Here's a Tuesday evening lash-up. Usage is:

  > mystack <- stack()   # initialisation
  > push(mystack,value)  # stores something on the stack
  > pop(mystack)         # returns 'value'

There's a print method that lists the stack. Its simply a list. Stack 
underflow is reported as 'attempt to select less than one element'. You 
can push anything on the stack. Almost. I just tried pushing a stack 
object onto the stack, and got infinite recursion, cant think why. 
Anyway, this seems to work for most sensible situations!


stack <- function(){

   it <- list()
   res <- list(
               push=function(x){
                 it[[length(it)+1]] <<- x
               },
               pop=function(){
                 val <- it[[length(it)]]
                 it <<- it[-length(it)]
                 return(val)
               },
               value=function(){
                 return(it)
               }
               )
   class(res) <- "stack"
   res

}

print.stack <- function(x,...){
   print(x$value())
}

push <- function(stack,obj){
   stack$push(obj)
}

pop <- function(stack){
   stack$pop()
}


Baz




More information about the R-help mailing list