Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fonction statique ?

26 views
Skip to first unread message

Blady

unread,
May 7, 2013, 6:34:42 AM5/7/13
to
Bonjour,

la structure case en Ada impose d'avoir des constantes ou expressions
statiques comme choix, pas de souci � ce sujet.
Par contre, pour simplifier l'�criture je souhaite factoriser les
expressions par une fonction. L� patatras, m�me si ma fonction reprends
exactement mon expression statique avec un argument statique, le
compilateur n'en veut pas, comme dans l'exemple suivant:

1. procedure Essai02 is
2.
3. type Mon_enum1 is (A, B, C, D);
4.
5. type Mon_enum2 is (AA, BB, CC, DD);
6.
7. function T (V : Mon_enum2) return Mon_enum1 is
8. begin
9. return Mon_enum1'Val (Mon_enum2'Pos (V));
10. end T;
11.
12. V1 : Mon_enum1;
13. V2 : Float;
14.
15. begin
16. case V1 is
|
>>> missing case value: "C"

17. when A =>
18. V2 := 3.1;
19. when Mon_enum1'Val (Mon_enum2'Pos (BB)) =>
20. V2 := 3.2;
21. when T(CC) =>
|
>>> choice given in case statement is not static
>>> non-static function call (RM 4.9(6,18))

22. V2 := 3.3;
23. when D =>
24. V2 := 3.4;
25. end case;
26. end Essai02;

Ligne 19 c'est ok, ligne 21 �a coince.

Y aurait-il un moyen de d�clarer la fonction T "statique" ?
C'est � dire sans effet de bord, sans param�tre "out"...
Dans ce dernier cas le compilateur pourrait tr�s bien pr�-calculer les
choix.

Merci pour vos r�ponses, Pascal.

J-P. Rosen

unread,
May 7, 2013, 8:19:17 AM5/7/13
to
Le 07/05/2013 12:34, Blady a �crit :
> Y aurait-il un moyen de d�clarer la fonction T "statique" ?
> C'est � dire sans effet de bord, sans param�tre "out"...
> Dans ce dernier cas le compilateur pourrait tr�s bien pr�-calculer les
> choix.

Cf. 4.9(18..23) pour la d�finition des fonctions statiques, mais �a
n'inclut pas les fonctions d�finies par l'utilisateur. J'ai eu un doute
pour les fonctions-expressions, mais elle ne sont pas incluses non plus.
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr

Blady

unread,
May 7, 2013, 12:04:16 PM5/7/13
to
Le 07/05/13 14:19, J-P. Rosen a �crit :
> Le 07/05/2013 12:34, Blady a �crit :
>> Y aurait-il un moyen de d�clarer la fonction T "statique" ?
>> C'est � dire sans effet de bord, sans param�tre "out"...
>> Dans ce dernier cas le compilateur pourrait tr�s bien pr�-calculer les
>> choix.
>
> Cf. 4.9(18..23) pour la d�finition des fonctions statiques, mais �a
> n'inclut pas les fonctions d�finies par l'utilisateur. J'ai eu un doute
> pour les fonctions-expressions, mais elle ne sont pas incluses non plus.
>

Cela pourrait-il �tre une �volution envisageable du langage ?
�viterait un enchainement de if ... then ... elsif ... disgracieux.

Pascal.


J-P. Rosen

unread,
May 8, 2013, 3:02:53 AM5/8/13
to
Le 07/05/2013 18:04, Blady a �crit :
Renseignement pris, �a a �t� discut� dans le cadre de AI05-0177-1.
Comme d'habitude, le diable est dans les d�tails...

Ce ne serait possible que si une fonction est /visiblement/ une fonction
expression, ce qui restreindrait l'utilit�... ou alors faire un aspect
Static_Function.

L'id�e pourrait faire son chemin dans l'ARG, mais ce n'est pas pour demain.
0 new messages