Abstrasy
2.0 (beta)

Piste: • <>?
 

<>?

Le prédicat <>? permet de tester l'inégalité de la valeur de son premier argument par rapport à tous les autres. Le prédicat retourne donc (true) si le premier de ses argument a une valeur différente de celle de tous les autres.

Attention, il ne s'agit pas d'un test de contrainte «all-differents» où tous les arguments doivent être différents les uns par rapport aux autres. Le test de <>? ne s'applique qu'au premier argument.


La forme courante du prédicat <>? est la suivante:

(<>? <objet> <arg1> [ … <argN>])


Par exemple:

(display (<>? 25 25)
(display (<>? 10 11)

⇒

(false)
(true)

Le prédicat <>? peut recevoir autant d'arguments que nécessaire. Ainsi, (<>? a b c d e) permet de tester la combinaison des propositions «(a ≠ b) ET (a ≠ c) ET (a ≠ d) ET (a ≠ e)» en une seule opération.

Comme le prédicat teste les valeurs, il est possible de l'utiliser de manière générique si la conversion explicite n'est pas obligatoire.

(display (<>? 25.0 25) # La valeur du nombre à virgule flottante est-elle différente à celle de l'entier ?...

⇒

(false)

Bien entendu, si la conversion doit être explicite et qu'elle n'est pas utilisée, l'interpréteur signale une erreur. Pour illustrer cela, inversons l'ordre des argument de notre précédent exemple. La valeur entière d'un nombre flottant peut varier en fonction du mode d'arrondi choisi.

(display (<>? 25 25.0)

⇒

ERROR...
@000001> Trace: (display (<>? 25 25.0))
@000001> Type coercion error

Il sera donc nécessaire de forcer la conversion du nombre à virgule flottante pour supprimer l'erreur.

(display (<>? 25 (int 25.0))

⇒

(false)

Il est intéressant de noter que le test d'inégalité fonctionne de la même manière que le test d'identité avec certains types (comme le type «nothing» ou les booléens, par exemple).

(display (<>? (nothing) 10)

⇒

(true)

Enfin, le prédicat <>? est un opérateur générique surchargeable. Pour étendre son concept à un nouveau type, il suffit de définir la méthode @NEQ?.

Attention, toutefois, il y a une différence entre le prédicat d'inégalité et le prédicat d'égalité. Il est donc possible qu'on puisse tester l'égalité d'un certain type sans pouvoir réaliser le test d'inégalité si la méthode @NEQ? a été omise.

refs/lang/opindex/is_neq.txt · Dernière modification: 2013/06/03 19:25 (modification externe)

Retour
Table des matières

 

     
Licence Creative Commons
   Get abstrasy at SourceForge.net. Fast, secure and Free Open Source software downloads