proc Push { stack value } {
upvar $stack S
if ![info exists S(top)] {
set S(top) 0
}
set S($S(top)) $value
incr S(top)
}
proc Pop { stack } {
upvar $stack S
if ![info exists S(top)] {
return {is null}
}
if {$S(top) == 0} {
return {bottom}
# unset $S(top)
# array unset S
# unset $S
} else {
incr S(top) -1
set x $S($S(top))
unset S($S(top))
return "S($S(top))=$x"
}
}
puts [Push stack 1]
puts [Push stack 2]
puts [Push stack 3]
puts [Pop stack]
puts [Pop stack]
puts [Pop stack]
puts [Pop stack]
#puts "top =$S(top)"
puts [Pop stack]
puts "top =$S(top)"
#puts "a=$a"
#set b 1
#puts "b=$b"
#unset b
#puts "unset, b=$b"