next up previous contents
Next: Liaisons locales à un Up: Les fonctions Previous: Déclaration de fonctions

Exécution d'un appel

Une fonction est invoquée ou appelée en faisant suivre son nom d'une liste de paramètres effectifs séparés par des virgules et entourés entre parenthèses.

Syntaxe d'un appel:

appel_fonction ::= identificateur_fonction ( liste_param_effectifs )
   
liste_param_effectifs ::= param_effectif { , param_effectif }

Exemple:

  x :=  succeseur(3) + 2;

Un paramètre ou argument effectif est une valeur concrètre donnée en entrée à la fonction. Chaque valeur de paramètre effectif est liée au paramètre formel correspondant dans le corps de la fonction. Cette liaison est temporaire, elle dure le temps de l'exécution de la fonction. Dans notre exemple, 3 est la valeur effective donnée au paramètre formel x à l'intérieur de la fonction. Informellement, la sémantique de l'appel succeseur(3) est:

Parfois, nous utiliserons un schéma de substitutions et de simplifications pour expliquer la sémantique d'un appel (et des expressions en général). Ainsi, on remplacera un appel de fonction par son corps, où l'on a pris soin de substituer au préalable, les ocurrences des paramètres formels par les valeurs des arguments effectifs. Ensuite, on simplifie les expressions ainsi obtenues jusqu'à retrouver le résultat final rendu par la fonction. Dans notre exemple cela donne:

x := succeseur(3) + 2;
  := ( (x + 1) x = 3) + 2
  := (3 + 1) + 2
  := 4 + 2
  := 6

Lors d'un appel de fonction, il doit y avoir autant de paramètres effectifs qu'il y a eu de paramètres formels déclarés. Chaque paramètre effectif correspond au paramètre formel de même position dans l'entête de la fonction, et doit avoir un type compatible avec celui-ci. Par exemple, pour la fonction:

function f(x : integer; c : character) return ...

l'appel f(`c`, 2) provoque une erreur de typage à la compilation, alors que l'appel f(2,`c`) est correct.

Enfin, les paramètres effectifs passés à une fonction doivent avoir une valeur connue, ainsi, trois sortes de paramètres effectifs sont admis:

Les paramètres d'une fonction sont considérés en tant que constantes, il est impossible de modifier leur valeur. La fonction

function succeseur(x:integer) return integer is
begin
   x := x + 1;
   return(x);
end succeseur;

produit une erreur à la compilation.


next up previous contents
Next: Liaisons locales à un Up: Les fonctions Previous: Déclaration de fonctions
Maria-Viginia Aponte
2001-11-21