home *** CD-ROM | disk | FTP | other *** search
-
- proc assert {exp} {
- if ![uplevel "expr {$exp}"] {
- error "ASSERT failed"
- }
- }
-
-
- ###
- ### perl-like array operators
- ###
-
- proc lsplice {list offset length {new {}}} {
- upvar $list l
- set last [expr {$offset + $length - 1}]
- set ret [lrange $l $offset $last]
- if {$offset > $last} {
- set l [eval linsert {$l} {[expr $last + 1]} $new]
- } else {
- set l [eval lreplace {$l} {$offset} {$last} $new]
- }
- set ret
- }
-
- proc lshift {list} {
- upvar $list l
- set ret [lindex $l 0]
- set l [lrange $l 1 end]
- set ret
- }
-
- proc lunshift {list val} {
- upvar $list l
- set l [linsert $l 0 $val]
- }
-
- proc lpush {list val} {
- upvar $list l
- lappend l $val
- }
-
- proc lpop {list} {
- upvar $list l
- set last [expr {[llength $l] - 1}]
- set ret [lindex $l $last]
- set l [lreplace $l $last $last]
- set ret
- }
-
- proc lmax {list} {
- set max [lindex $list 0]
- foreach l $list {
- if {$l > $max} {
- set max $l
- }
- }
- set max
- }
-
- proc lmin {list} {
- set min [lindex $list 0]
- foreach l $list {
- if {$l < $min} {
- set min $l
- }
- }
- set min
- }
-
- proc lprepend {list args} {
- upvar $list l
- eval set l \[linsert \$l 0 $args\]
- return $l
- }
-
- proc lreverse {list} {
- set result {}
- foreach element $list {
- set result [linsert $result 0 $element]
- }
- return $result
- }
-
-
-
- ###
- ### string ops
- ###
-
- proc string_delete {str start {end {}}} {
- if {$end == {}} {
- set end $start
- }
- set start [string range $str 0 [expr {$start - 1}]]
- set end [string range $str [expr {$end + 1}] end]
- return "$start$end"
- }
-
-
- ###
- ### random -- courtesy of Don Libes, slightly hacked since then.
- ###
-
- proc random {args} {
- global _ran
-
- if { [llength $args]>1 } {
- set _ran [lindex $args 1]
- } else {
- set period 233280
- if { [info exists _ran] } {
- set _ran [expr { ($_ran*9301 + 49297) % $period }]
- } else {
- set _ran [expr { [clock seconds] % $period } ]
- }
- return [expr { int($args*($_ran/double($period))) } ]
- }
- }
-
- random seed [clock seconds]
-
-
- ###
- ### other
- ###
-
- proc max {args} {
- lmax $args
- }
-
- proc min {args} {
- lmin $args
- }
-
- proc map {list f} {
- set ret {}
- foreach l $list {
- lappend ret [$f $l]
- }
- set ret
- }
-