Posted to tcl by mjanssen at Mon Sep 16 07:46:07 GMT 2013view raw

  1.  
  2.  
  3. proc my_mrange {a b args} {
  4. set result {}
  5. set start [expr {min($a,$b)}]
  6. set stop [expr {max($a,$b)}]
  7.  
  8. for {set i $start} {$i <= $stop} {incr i} {
  9. if {[llength $args]%2==0 && $args ne {}} {
  10. foreach item [my_mrange {*}$args] {
  11. lappend result [list $i {*}$item]
  12. }
  13. } else {
  14. lappend result $i
  15. }
  16. }
  17. if {$b < $a} {
  18. return [lreverse $result]
  19. } else {
  20. return $result
  21. }
  22. }