32 lines
594 B
Tcl
32 lines
594 B
Tcl
proc push {stackvar value} {
|
|
upvar 1 $stackvar stack
|
|
lappend stack $value
|
|
}
|
|
proc pop {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
set value [lindex $stack end]
|
|
set stack [lrange $stack 0 end-1]
|
|
return $value
|
|
}
|
|
proc size {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
llength $stack
|
|
}
|
|
proc empty {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
expr {[size stack] == 0}
|
|
}
|
|
proc peek {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
lindex $stack end
|
|
}
|
|
|
|
set S [list]
|
|
empty S ;# ==> 1 (true)
|
|
push S foo
|
|
empty S ;# ==> 0 (false)
|
|
push S bar
|
|
peek S ;# ==> bar
|
|
pop S ;# ==> bar
|
|
peek S ;# ==> foo
|