Aide en ligne » Les mots-clef retourne et eval

Les mots-clef retourne et eval

Une procédure peut désormais renvoyer un résultat numérique que l'on peut réutiliser dans des calculs ou comme argument d'autres procédures. Il suffit pour cela d'insérer une ligne comprenant le mot-clef retourne au sein de la procédure.

Par exemple, la procédure max ci-dessous renvoie le plus grand des deux nombres a et b passés en argument.

pour max a b
si (a<=b) alors [ retourne b ] sinon [retourne a]
fin

Pour évaluer le résultat de la procédure, on utilise le mot-clef eval :

aff eval(max 9 4)
aff eval(max 4 9)

Une procédure peut contenir à la fois des commandes géométriques et retourner un résultat. Les procédures ci-dessous permettent de tracer des carrés et des triangles tout en renvoyant leur périmètre.

pour carré côté
rep 4 [ av côté ; td 90 ]
retourne 4*côté
fin

pour triangle côté
rep 3 [ av côté ; td 120 ]
retourne 3*côté
fin

Les commandes ci-dessous montrent comment afficher la distance totale parcourue par la tortue.

aff eval(triangle 100)+eval(carré 50)
aff eval(carré 50)+eval(triangle 100)

Le résultat d'une procédure peut être également passé en argument dans une autre procédure. Attention toutefois à l'ordre dans lequel sont appelées les procédures : les commandes ci-dessous n'ont pas du tout le même effet.

triangle eval(carré 50) // un carré de côté 50, un triangle de côté 200
carré eval(triangle 50) // un triangle de côté 50, un carré de côté 150

Dans la même veine, il n'est pas très compliqué de bricoler des procédures qui mettent en défaut la commutativité de l'addition.

pour A
av 100 ; retourne X(Achille)
fin

pour B
td 90 ; av 100 ; retourne X(Achille)
fin

vg; aff eval(A)+eval(B) // Résultat : 100
vg; aff eval(B)+eval(A) // Résultat : 300

Notons enfin que la récursivité autorise qu'une procédure contienne un ou des appels vers elle-même. Ci-dessous un exemple d'emploi pour le calcul du pgcd de deux nombres.

pour pgcd a b
si (b==0) alors [ retourne a ] sinon [ retourne eval( pgcd b reste(a, b) ) ]
fin