proc reverse {string} {
  set lst [split $string {}]
  set len [llength $lst]
  incr len -1
  for {set i $len} {$i >= 0} {incr i -1} {
    lappend rtn [lindex $lst $i]
  }
  return [join $rtn {}]
}

proc reverse {lst} {
  set i 0
  foreach el $lst {
    lappend rtn [lindex $lst end-$i]
    incr i
  }
  return $rtn
}
set level 0
proc reverseR {lst} {
  set level [info level]
  puts "$level: LST: $lst"

  if {[llength $lst] == 1} {return $lst}
  set newlist [reverseR [lrange $lst 1 end]]
  puts "$level will return $newlist [lindex $lst 0]"
  return [concat $newlist [lindex $lst 0]]
}
puts "[reverseR {a b c d e}]"
puts [join [reverse {192 168 1 20}] .]