4.3BSD/usr/contrib/icon/book/17/reverse.icn

procedure reverse(s)
   static labels, trans, max
   initial {
      labels := "abcdefghijklmnopqrstuvwxyz"
      trans := "zyxwvutsrqponmlkjihgfedcba"
      max := *labels
      }
   if *s <= max then
      return map(right(trans,*s),left(labels,*s),s)
   else return reverse(right(s,*s - max)) ||
      map(trans,labels,left(s,max))
end