Autres articles / Other articles

Comparaisons et branchements

publication: 7 février 2023 / mis à jour 23 février 2023

Read this page in english

 

Comparaisons et branchements

ESP32forth vous permet de comparer deux nombres sur la pile, en utilisant les opérateurs relationnels >, < et =.

hex 
2 3 = .     \ display: 0 
2 3 >       \ display: 0 
2 3 <       \ display: ffff 

Ces opérateurs consomment les deux arguments et laissent un indicateur, pour représenter le résultat booléen. Ci-dessus, on voit que «2 est égal à 3» est faux (valeur 0), «2 est supérieur à 3» est également faux, tandis que "2 est inférieur à 3" est vrai. Le drapeau vrai a tous les bits mis à 1, d'où la représentation hexadécimale 16 bits ffff et la représentation signée correspondante -1. ESP32forth fournit également les opérateurs relationnels 0= et 0< qui testent si le TOS est nul et négatif, respectivement.

Les mots relationnels sont utilisés pour la ramification et le contrôle. Par exemple:

: test  
    0= invert  
    if  
        cr ." Not zero!"  
    then  
  ; 
0 test      \ no display 
-14 test    \ display: Not zero! 

Le sommet de pile est comparé à zéro et l'opérateur d'inversion (complément à un) retourne tous les bits dans le drapeau résultant. Si le sommet de pile est différent de zéro, le mot if consomme le drapeau et s'exécute tous les mots entre lui-même et la terminaison then. Si le sommet de pile est nul, l'exécution saute au mot qui suit then. Le mot cr émet un retour chariot (newline). Le mot else peut être utilisé pour fournir un autre chemin d'exécution, comme illustré ici.

: truth  
    0=  
    if  
        ." false"  
    else  
        ." true"  
    then  
  ;  
1 truth     \ display: true 
0 truth     \ display: false 

Un sommet de pile non nul entraîne l'exécution de mots entre if et else, et les mots entre else et then à ignorer. Une valeur nulle produit le comportement inverse.

Les opérateurs booléens

Le langage FORTH ne gère aucun autre type de données que des entiers traités par la pile de paramètres.

Les entiers de la version ESP32forth sont au format 32 bits. Il n'existe donc pas de type booléen en Forth, à fortiori avec ESP32forth.


Legal: site web personnel sans commerce / personal site without seling