1 {subprogram} {procedure} {function} 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.]
1.a To be honest: A function call is an expression, but more specifically it is a name.
1.b/2 Glossary entry: {Subprogram} A subprogram is a section of program that can be executed in various contexts. It is invoked by a subprogram call that may qualify the effect of the subprogram through the passing of parameters. There are two forms of subprograms: functions, which return values, and procedures, which do not.
1.c/2 Glossary entry: {Function} A function is a form of subprogram that returns a result and can be called as part of an expression.
1.d/2 Glossary entry: {Procedure} A procedure is a form of subprogram that does not return a result and can only be called by a statement.
2 {callable entity} A callable entity is a subprogram or entry (see Section 9). {call} A callable entity is invoked by a call; that is, a subprogram call or entry call. {callable construct} 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.
2.a Ramification: Note that “callable entity” includes predefined operators, enumeration literals, and abstract subprograms. “Call” includes calls of these things. They do not have callable constructs, since they don't have completions.
[aada]
The abstraction in AAda takes the result of a function as a parameter instead.
This a function declaration that looks like this:
function foo(a; b; c) return d;
is to be transformed into something like this:
procedure foo(a; b; c; d: out ...);
This not only simplifies returning of complex types, it also simplifies searching for the right overloaded procedure or function.
[/aada]