Une procédure peut être considérée comme une instruction composée que l'utilisateur aurait créée lui-même. On peut la considérer comme un petit programme.
Une fonction quant à elle renvoie toujours une "valeur". Elle nécessite donc un type (entier, caractère, booléen, réel, etc...).
Il est interdit d'utiliser l'identificateur d'une fonction comme nom de variable en dehors du bloc correspondant à sa déclaration.
program exemple;
var
x,y : integer;
function double (z : integer) : integer;
begin
double := z*2;
end;
begin
readln(x);
y := double(x);
double := 8; { erreur à cette ligne lors de la compilation }
end.
Ce programme ne pourra pas fonctionner, car on lui demande d'affecter la valeur 8 à la fonction double. Or, il est interdit d'utiliser l'identificateur d'une fonction comme nom de variable en dehors du bloc correspondant à sa déclaration.