Quelques mots :
Voici quelques mots Forth,
et leur action :
+ Addition
-
Soustraction
/
Division entière
* Multiplication
.
Affichage destructif du sommet de la pile
.s Affichage non
destructif de la pile
Qu'est ce que c'est cette histoire de pile? Le Forth est un langage
à pile, c'est à dire qu'il faut déposer sur
une pile les données que l'on veut faire traiter par Forth,
et qu'il renvoie lui même les résultats sur cette pile.
Ainsi si je veux additionner 2 et 3, je dois les déposer sur la
pile en tapant (les commentaires sont entre parenthèses) :
2¬
( il y a 2 sur la pile )
3¬
( il y a 2 et 3 sur la pile, 3 au dessus de 2 )
+¬
( Forth utilise 2 et 3, et renvoie 5 sur la pile )
.¬
( On affiche le résultat, et la pile est a nouveau
vide )
On aurait pu écrire la même phrase Forth comme ceci :
2 3 + .¬
Notons que la multiplication et l'addition sont commutatives,
et que donc l'ordre des opérandes est sans importance, ce qui
n'est pas le cas pour la soustraction ou la division, ainsi :
3 2 - .¬
(affichera 1)
2 3 - .¬
(affichera -1)
4 2 / .¬
(affichera 2)
2 4 / .¬
(affichera 0 -division entiere-)
L'état de la pile est très important, c'est pourquoi,
on représente souvent l'état de la pile avant et après
une opération par un descripteur de pile noté entre parenthèses,
ainsi pour l'addition le descripteur est :
( n1 n2 -- n1+n2 ), c'est à dire on prend l'entier n1 et
l'entier n2 sur la pile, on fait l'opération symbolisée
par les deux tirets ( certains en utilisent trois ), et la pile se retrouve
avec un entier étant la somme de n1 et n2 au sommet, on aurait
aussi pu écrire le descripteur de pile comme ceci ( n1 n2 -- n3
), mais on n'aurait moins de précision sur la valeur de n3.
Notons que dans le descripteur de pile, l'élément le
plus à droite (de part et d'autre des tirets) représente
le sommet de la pile. Si l'on veut exécuter l'opération
suivante : (1+2)*(5-1), comme Forth ne connait pas les parenthèses
pour les calculs, il faudra écrire :
1 2 + 5 1 - * .¬
(déposer 1 et 2 les additionner-première parenthèse-
déposer 5 et 1 soustraire le second du premier-deuxième
parenthèse- multiplier et afficher) Décomposons cette
formule et affichons l'état de la pile :
1 2¬ ( -- 1 2 )
+¬ ( 1 2 -- 3 )
5 1¬ ( 3 -- 3 5 1 )
-¬ ( 3 5 1 -- 3
4 )
*¬ ( 3 4 -- 12 )
¬ ( 12 -- )
NB : Lorsque Forth attends des ordres, il affiche OK.
|