(*
 * MergeSort
 *
 * This function sorts a sequence of numbers or strings into ascending order
 * using merge sort.
 *
 * Examples:
 *
 *      <3 1 4 1 5 9 2> : MergeSort == <1 1 2 3 4 5 9>
 *
 *      <all work and no play> : MergeSort == <all and no play work>
 *
 * The sequence may not mix strings and numbers.
 *)
DEF MergeSort AS
   IF [length,#2] | < THEN id
   ELSE
       [id, [length,#2] | div] |
       [takel,dropl] | EACH MergeSort END | Merge
   END;

