with GNAT.Heap_Sort_G; function sort1 (S : String) return String is Result : String (1 .. S'Length) := S; Temp : Character; procedure Move (From : Natural; To : Natural) is begin if From = 0 then Result (To) := Temp; elsif To = 0 then Temp := Result (From); else Result (To) := Result (From); end if; end Move; function Lt (Op1, Op2 : Natural) return Boolean is begin if Op1 = 0 then return Temp < Result (Op2); elsif Op2 = 0 then return Result (Op1) < Temp; else return Result (Op1) < Result (Op2); end if; end Lt; package SP is new GNAT.Heap_Sort_G (Move, Lt); begin SP.Sort (S'Length); return Result; end;