2015-03-30 4 views
1

Rebol et Red ont une notion de la fonction equal? ordinaire (infixe offert simplement comme =) comme étant une sorte d '"égalité naturelle" . Par conséquent, il est prêt à comparer 1 = 1.0 même si l'un est un entier et l'autre un flottant ... et de comparer les chaînes et les caractères de manière insensible à la casse par défaut.Comment écrire strict-plus grand? (-lesser ?, -greater-or-equal ?, -lesser-or-equal?)

La fonction strict-equal? est sensible à la casse, exige que les choses soient du même type de données et est liée à == en tant qu'infix. (Il existe également une fonction strict-not-equal? en tant que !==.)

Cependant, les autres opérateurs de comparaison ne semblent pas avoir une variante stricte. Comment implémenter un strict-greater? ou un strict-lesser-or-equal?, etc. avec les primitives dans la boîte?

comportement serait, par exemple:

>> strict-lesser? "A" "a" 
== true 
+0

Dans Rebol2 à la fois moindre? "A" "A" et moins? "A" "a" renvoie false. moindre? # "A" # "a" == vrai pour char! valeurs. – endo64

Répondre

2

Comme endo64 points sur, les chaînes sont la pierre d'achoppement, mais puisque leurs composants, des personnages, ont les inégalités strictes souhaitées, la solution semble être de comparer les chaînes caractère par caractère ("lexicographiquement", si vous le souhaitez). Cela vaut pour Rebol2, Rebol3 et Red.