2 Synthesis‎ > ‎Computing‎ > ‎Programming‎ > ‎Ada‎ > ‎Ada Language‎ > ‎

Subprograms

UNFINISHED CONTENT

A subprogram is a program unit whose execution is invoked by a subprogram call from usually another program unit.

Example of a proceedure specification file push.ads;

procedure Push(E : in Element_Type; S : in out Stack);

and the procedure body file push.adb;

procedure Push(E : in Element_Type; S : in out Stack) is
begin
   if S.Index = S.Size then
      raise Stack_Overflow;
   else
      S.Index := S.Index + 1;
      S.Space(S.Index) := E;
   end if;
end Push;

Example of a function specification file dot_product.ads; 

function Dot_Product(Left, Right : Vector) return Real;

and the function body file dot_product..adb;

function Dot_Product(Left, Right : Vector) return Real is
   Sum : Real := 0.0;
begin
   Check(Left'First = Right'First and Left'Last = Right'Last);
   for J in Left'Range loop
      Sum := Sum + Left(J)*Right(J);
   end loop;
   return Sum;
end Dot_Product;


Examples of subprogram declarations: 
procedure Traverse_Tree;
procedure Increment(X : in out Integer);
procedure Right_Indent(Margin : out Line_Size);          --  see 3.5.4
procedure Switch(From, To : in out Link);                --  see 3.10.1
38
function Random return Probability;                      --  see 3.5.7
39
function Min_Cell(X : Link) return Cell;                 --  see 3.10.1
function Next_Frame(K : Positive) return Frame;          --  see 3.10
function Dot_Product(Left, Right : Vector) return Real;  --  see 3.6
40
function "*"(Left, Right : Matrix) return Matrix;        --  see 3.6
41
Examples of in parameters with default expressions: 
42
procedure Print_Header(Pages  : in Natural;
            Header : in Line    :=  (1 .. Line'Last => ' ');  --  see 3.6
            Center : in Boolean := True);




Examples of procedure calls: 
14
Traverse_Tree;                                               --  see 6.1
Print_Header(128, Title, True);                              --  see 6.1
15
Switch(From => X, To => Next);                               --  see 6.1
Print_Header(128, Header => Title, Center => True);          --  see 6.1
Print_Header(Header => Title, Center => True, Pages => 128); --  see 6.1
16
Examples of function calls: 
17
Dot_Product(U, V)   --  see 6.1 and 6.3
Clock               --  see 9.6
F.all               --  presuming F is of an access-to-subprogram type — see 3.10
18
Examples of procedures with default expressions: 
19
procedure Activate(Process : in Process_Name;
                   After   : in Process_Name := No_Process;
                   Wait    : in Duration := 0.0;
                   Prior   : in Boolean := False);
20
procedure Pair(Left, Right : in Person_Name := new Person);   --  see 3.10.1
21
Examples of their calls: 
22
Activate(X);
Activate(X, After => Y);
Activate(X, Wait => 60.0, Prior => True);
Activate(X, Y, 10.0, False);
23
Pair;
Pair(Left => new Person, Right => new Person);
NOTES
24
7  If a default_expression is used for two or more parameters in a multiple parameter_specification, the default_expression is evaluated once for each omitted parameter. Hence in the above examples, the two calls of Pair are equivalent. 

Examples

25
Examples of overloaded subprograms: 
26
procedure Put(X : in Integer);
procedure Put(X : in String);
27
procedure Set(Tint   : in Color);
procedure Set(Signal : in Light);
28
Examples of their calls: 
29
Put(28);
Put("no possible ambiguity here");
30
Set(Tint   => Red);
Set(Signal => Red);
Set(Color'(Red));
31
--  Set(Red) would be ambiguous since Red may
--  denote a value either of type Color or of type Light







Comments