Version 2 of range

Updated 2004-04-19 07:05:35

SS: Python's alike range. The semantic should be exactly the same (and seems the more sensible for Tcl also).

 # range ?start? end ?step?
 #
 # Python's alike range function.
 # Returns the [start,end) integer range.
 #
 # Example:
 #
 # foreach x [range 0 10] y [range 20 0 -2] {
 #     puts "$x $y"
 # }
 proc range args {
     set l [llength $args]
     if {$l == 1} {
         set start 0
         set step 1
         set end [lindex $args 0]
     } elseif {$l == 2} {
         set step 1
         foreach {start end} $args break
     } elseif {$l == 3} {
         foreach {start end step} $args break
     } else {
         error {wrong # of args: should be "range ?start? end ?step?"}
     }
     set result {}
     if {$start <= $end} {
         for {set j $start} {$j < $end} {incr j $step} {
             lappend result $j
         }
     } else {
         for {set j $start} {$j > $end} {incr j $step} {
             lappend result $j
         }
     }
     return $result
 }

See also Integer range generator