1with GNAT.Heap_Sort_G; 2function sort1 (S : String) return String is 3 Result : String (1 .. S'Length) := S; 4 Temp : Character; 5 6 procedure Move (From : Natural; To : Natural) is 7 begin 8 if From = 0 then Result (To) := Temp; 9 elsif To = 0 then Temp := Result (From); 10 else Result (To) := Result (From); 11 end if; 12 end Move; 13 14 function Lt (Op1, Op2 : Natural) return Boolean is 15 begin 16 if Op1 = 0 then return Temp < Result (Op2); 17 elsif Op2 = 0 then return Result (Op1) < Temp; 18 else return Result (Op1) < Result (Op2); 19 end if; 20 end Lt; 21 22 package SP is new GNAT.Heap_Sort_G (Move, Lt); 23 24begin 25 SP.Sort (S'Length); 26 return Result; 27end; 28