Le prédicat =? permet de tester l'égalité des valeurs de ses arguments. Le prédicat retourne donc (true) si tous ces arguments ont la même valeur.
La forme courante du prédicat =? est la suivante:
(=? <objet> <arg1> [ … <argN>])
Par exemple:
(display (=? 25 25) (display (=? 10 11)
⇒
(true) (false)
Le prédicat =? peut recevoir autant d'arguments que nécessaire. Ainsi, (=? a b c d e) permet de tester la proposition «a = b = c = d = e» en une seule opération.
De plus, comme le prédicat teste les valeurs, il est possible de l'utiliser de manière générique pour autant que la conversion explicite ne soit pas obligatoire.
(display (=? 25.0 25) # La valeur du float est-elle égale à celle de l'int ?...
⇒
(true)
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))
⇒
(true)
Il est aussi intéressant de noter que le test d'é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)
⇒
(false)
Enfin, le prédicat =? est un opérateur générique surchargeable. Il est donc possible de définir le comportement spécifique du prédicat et d'élargir son concept à tous nouveau type de donnée. Pour cela, il suffit de définir ou de surcharger la méthode @EQ?.
|
![]() |
|
||||||||