Idea: swap with multiple arguments

Era Scarecrow via Digitalmars-d digitalmars-d at puremagic.com
Tue May 24 13:19:20 PDT 2016


On Tuesday, 24 May 2016 at 12:22:01 UTC, H. S. Teoh wrote:
> And why would you assume that it would rotate right? The 
> default assumption, unless stated clearly and widely followed 
> everywhere, is unclear and leads to misunderstandings.

  hmmm rotate left would be a lot easier (and cleaner) to 
implement than rotate right..? And could include tail 
optimizations? If i consider a purely functional language where 
you have access to the left-side of the argument list but not the 
right side...

//Should probably heavily incorporate move as well...
//best if only bitwise-copies are necessary to swap/rotate values
void rotate(T...)(T[] arr) {
   T temp = arr[0];

   void inner(T[] vars) {
     if (arr.length > 1) {
       vars[0] = vars[1];
       inner(vars[1 .. $]);
     } else {
       vars[0] = temp;
     }
   }
   inner(arr);
}


More information about the Digitalmars-d mailing list