Le prédicat <? permet de tester l'ordre de grandeur des valeurs de ses arguments l'un par rapport à l'autre. Le prédicat retourne donc (true) si les valeurs de ses arguments sont respectivement croissantes.
On notera toutefois que c'est le type du premier argument qui détermine quelles seront les éventuelles conversions implicites.
La forme courante du prédicat <? est la suivante:
(<? <objet> <arg1> [ … <argN>])
Par exemple:
(define '$x 5) (display (<? 7 $x 2) (display (<? 3 $x)
⇒
(false) (true)
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.
S'agissant d'un prédicat générique, il bénéficie de la conversion implicite.
(display (<? 25.0 25) # La valeur du nombre à virgule flottante est-elle plus petite que celle de l'entier ?...
⇒
(false)
Bien entendu, si la conversion doit être explicite et qu'elle celle-ci n'est pas indiquée, l'interpréteur signale une erreur.
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 @LT?. Cela ne signifie toutefois pas que l'interpréteur déduit automatiquement le prédicat du comportement inverse (en l’occurrence >=?). Chaque prédicat générique surchargeable doit être défini par sa propre méthode respective.
|
![]() |
|
||||||||