El cuerpo de una función consta de: una especificación formada por un identificador (defining_designator), una lista de parámetros opcional (formal_part) y un result_profile que especifica el tipo del resultado que devuelve la función; una secuencia de declaraciones (declarative_part) y, encerrada en un bloque begin..end, la secuencia de sentencias ejecutables, que debe incluir al menos una sentencia de retorno con el resultado de la ejecución de la función. El end del final de la función puede ir acompañado (se recomienda) de un designator que debe coincidir con el identificador de la función.
Si la función es una unidad de librería, el identificador de la función puede incluir el nombre de la unidad padre (parent_unit_name).
El cuerpo de la función puede ir precedido de un indicador de overriding, si sustituye a una operación primitiva de algún tipo.
El cuerpo de una función completa una declaración previa, o sirve de declaración en caso de que no haya habido ninguna previa.
[overriding_indicator] function defining_designator [formal_part] result_profile is declarative_part begin handled_sequence_of_statements end [designator];
defining_designator ::= defining_program_unit_name | defining_operator_symbol
defining_program_unit_name ::= [parent_unit_name . ]defining_identifier designator ::= [parent_unit_name . ]defining_identifier
parent_unit_name ::= name
defining_operator_symbol ::= string_literal result_profile ::= return [null_exclusion] subtype_mark; | return access_definition
function Suma (A, B: Integer) return Integer is begin return A + B; -- No se puede omitir end Sumar;