October 28, 2017
---------------------------------------------------------------
In a reddit thread I saw a post, part of which dealt with a
stack reordering from this:

   abc

into this:

   bbaca

The solution, with commentary was:

   Start
     P: a b c
     R:
   Push to R, ">r"
     P: a b
     R: c
   Duplicate top of P, "dup"
     P: a b b
     R: c
   Rotate third element to top of P, "rot"
     P: b b a
     R: c
   Pop from R, "r>"
     P: b b a c
     R:
   Copy second element over the first, "over"
     P: b b a c a
     R:
   Result:
     >r dup rot r> over

While this is certainly a workable solution, I take a more pragmatic
view. If it's not something that'll benefit from a set of lower level
transformations (in terms of code space on embedded targets, or time
[if run repeatedly]), why go through the hassle?

I implemented `reorder` in RETRO to handle transformations like this
in a very simple manner:

  'abc 'bbaca reorder

And it's done. Works at both the interpreter and in a definition;
is easily understood. While I know Forth (after over a decade and a
half of use), I still need a few moments to go from "abc" to "bbaca"
when following the logic of ">r dup rot r> over". My `reorder` word
is less elegant than a proper stack reshuffle, but far easier for
me to work with and maintain.