Declara un procedimiento o función cuyo cuerpo tendrá que ser definido más adelante. La declaración de un subprograma consta de una especificación formada por un identificador (defining_designator) y una lista de parámetros opcional (formal_part). En el caso de las funciones deberá, además, especificarse el tipo de resultado que devuelve (result_profile). La declaración puede ir precedida de un indicador de overriding, si sustituye a una operación primitiva de algún tipo.
El modificador opcional null_exclusion se puede utilizar en las funciones cuando el tipo del resultado es un access (puntero) a un objeto para indicar que nunca se devuelve el valor null.
La ristra de caracteres que forma un operator_symbol debe corresponderse con un operador válido.
[overriding_indicator] function defining_designator [formal_part] result_profile;
defining_designator ::= defining_program_unit_name | defining_operator_symbol defining_program_unit_name ::= [parent_unit_name . ]defining_identifier
defining_operator_symbol ::= string_literal result_profile ::= return [null_exclusion] subtype_mark; | return access_definition
procedure Intercambiar (A, B : in out Integer); procedure Mezclar (L1, L2 : in Lista; L3 : out Lista); function Combinatorio (M, N : Natural) return natural;