triple-ref-trick.a68

     
   1  COMMENT
   2  
   3  @section Synopsis
   4  
   5  The "Algol 68 triple-REF trick" implementation of quicksort.
   6  
   7  Identifier "place" in procedure "insert" has mode REF REF REF NODE. 
   8  This is one of the few practical examples of using a pointer to a 
   9  pointer to a pointer.
  10  
  11  COMMENT
  12  
  13  MODE NODE = STRUCT (REAL v, REF NODE less, more);
  14  REF NODE end = NIL;
  15  REF NODE root := end;
  16  
  17  PROC insert = (REAL v) VOID:
  18       BEGIN REF REF NODE place := root;
  19             WHILE place ISNT end
  20             DO place := (v < v OF place | less OF place | more OF place)
  21             OD;
  22             REF REF NODE (place) := HEAP NODE := (v, end, end)
  23       END;
  24  
  25  PROC print tree = (REF NODE n) VOID:
  26       IF n ISNT NIL
  27       THEN print tree (less OF n);
  28            print ((new line, fixed (v OF n, 10, 4)));
  29            print tree (more OF n)
  30       FI;
  31  
  32  TO 10
  33  DO insert (next random)
  34  OD;
  35  
  36  print tree (root)