> -- Валерий Лаптев писал(а):
> Только там этого не видно, а здесь налицо явный параметр.
Я мог бы использовать L.Exchange в процедуре QuickSort, если бы она являлась методом List.

Решил таки внести QuickSort как скрытый метод списка, который при желании можно переопределить другой функцией сортировки.
## Код:
```
PROCEDURE (L: List) QuickSort (
         l, r : INTEGER;
         Compare: ListSortCompare), NEW;
      VAR
         i, j: INTEGER;
         p, q: INTEGER;
   BEGIN
      REPEAT
         i := l;
         j := r;
         p := (l + r) DIV 2;
         REPEAT
            WHILE Compare (p, i) > 0 DO INC(i) END;
            WHILE Compare (p, j) < 0 DO DEC(j) END;
            IF i <= j THEN
               L.Exchange (i, j);
               INC(i);
               DEC(j)
            END;
         UNTIL i > j;
         IF i < j THEN L.QuickSort (l, j, Compare) END;
         l := i;
      UNTIL i >= r;
   END QuickSort;
   
   PROCEDURE (L: List) Sort*(Compare: ListSortCompare), NEW, EXTENSIBLE;
   BEGIN
      L.QuickSort (0, L.FCount - 1, Compare)
   END Sort;
```
