Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires
Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.
|
|
Auteur | Message |
---|---|
Administrateur
|
Astuce en forme de présentation aux prédicats introduits par Ada 2012.
Soit l’ensemble de déclarations suivant : Source Ada :package P is Cette spécification est rejetée, pourquoi ? La réponse est dans la référence, section Subtype Declarations [Ada RM 2005 3.2.2]. On y voit que la définition d’un sous‑type, requière des contraintes explicites, et que la petite boite noir, le <>, qui signifie que cette partie est variable, n’est permise que pour une définition de type, mais pas pour la définition d’un sous‑type. Remarque N°1. Attention, il y a un petit piège (un des rares petits pièges de Ada, l’autre principale ayant à voir avec les discriminants par défaut) Source Ada :subtype Tiny_Text_Type is Text_Type (Tiny_Index_Type); … n’aura pas le résultat que vous attendez. Cette construction équivaut en effet à : Source Ada :subtype Tiny_Text_Type is Text_Type qui fixe les contraintes et ne les rend pas libres. Remarque N°2. Définir un type dérivé au lieu d’un sous‑type ne sera pas non‑plus une solution. Source Ada :type Tiny_Text_Type is new Text_Type (Tiny_Index_Type range <>); Ça n’est pas de l’Ada valide non‑plus, comme le confirme la référence Derived Types and Classes [Ada RM 2005 3.4(2/2)] qui montre que la définition d’un type dérivé repose sur celle d’un sous‑type. Si nous souhaitons que Tiny_Text_Type soit un sous‑type de Text_Type, mais ne voulons pas fixer les bornes du tableau définitivement, comment faire alors ? Ada 2012 apporte la solution Depuis Ada 2012, nous pouvons donner au type, un prédicat, qui précisera le nouvel intervalle permis pour les bornes du tableau, sans les geler. Cette nouvelle construction se nomme « Prédicat de sous‑type ». Voir : Subtype Predicates [Ada RM 2012 3.2.4]. Sa notation repose sur celle déjà connue des clauses de Spécifications d’Aspect. Voir : Aspect Specifications [Ada RM 2012 13.3.1]. Deux type de prédicats existent pour les sous‑types. Les prédicats dynamiques et les prédicats statiques. Ici, un prédicat statique suffira, puisque le prédicat reposera sur une expression statique. Il faudra vous assurer de compiler votre programme avec le contrôle des prédicats activé et ne pas oublier que s’ils ne sont pas vérifiés, les prédicats renvoient des erreurs à l’exécution et non‑pas à la compilation, même s’il reste possible qu’un compilateur renvoie des avertissement à la compilation lorsqu’il a la certitude qu’un prédicat ne sera pas vérifié. Voici finalement la manière de faire : Source Ada :package P is Attention ! L’écriture suivante, même si on en devine le sens, n’est pas valide : Source Ada :package P is La raison en est que le prédicat statique doit être une expression (booléenne), et il n’est pas permis d’utiliser l’attribut Range dans une expression. En effet, un intervalle, n’est pas une expression, mais une construction. Il faut en écrire un peu plus, et faire porter l’expression sur First et Last. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
|
|
Beau Parleur
|
Bonjour Hibou, j'essayer ton astuce mais sans y parvenir.
Le compilateur me dit que mon tableau n'est pas un scalaire. |
Administrateur
|
Hello,
Peut‑être une erreur de syntaxe. Le message d’erreur signifie probablement que tu as utilisé un type inapproprié. Il ne faut pas prendre le dernier exemple, qui est justement un exemple d’écriture semblant correcte mais ne l’étant pas. C’est l’avant dernier exemple, qui est correcte. Hibou57 « La perversion de la cité commence par la fraude des mots » [Platon] |
Beau Parleur
|
J'ai pris le bon exemple, par d'erreur de syntaxe.
Je n'ai plus le code sous la main. C'était un tableau de character tout normal comme toi. |
|