A
subprogram is a program unit or intrinsic operation whose execution is
invoked by a subprogram call. There are two forms of subprogram: procedures
and functions. A procedure call is a 
statement;
a function call is an expression and returns a value. The definition
of a subprogram can be given in two parts: a subprogram declaration defining
its interface, and a 
subprogram_body
defining its execution. Operators and enumeration literals are functions.
 
   A 
callable entity is
a subprogram or entry (see Section 9). 
A callable
entity is invoked by a 
call; that is, a subprogram call or entry
call. 
A 
callable construct is a construct
that defines the action of a call upon a callable entity: a 
subprogram_body,
entry_body, or 
accept_statement.