Hoho! je viens de réussir à le faire en mode direct! J'ai bien obtenu la factorielle d'un entier.
D'abord j'ai regardé en mode direct comment fonctionne la pile. Mon manuel étant pourri, j'ai fait mes tests à la main.
Le point . affiche le contenu du sommet de la pile, mais il fait un pop, donc décale la pile et fait sortir la valeur.
Le .S affiche le contenu de toute la pile, mais sans toucher à la pile.
J'ai vidé la pile, puis mis dedans uniquement la valeur 5 (au sommet donc) puis j'ai fait un DUP 1-
Cela duplique bien le sommet de la pile et décrémente la valeur au sommet. Au sommet se trouve maintenant 4, puis 5 juste en dessous. la pile contient 5 4 (.S l'affiche, 4 c'est le sommet, toujours à droite)
J'ai refait un DUP 1- qui a dupliqué la valeur décrémentée au sommet en poussant les autres vers le bas. la pile contient 5 4 3 (.S l'affiche)
J'ai continué jusqu'à obtenir les valeurs 5 4 3 2 1 placées dans la pile. (1 est le sommet de la pile)
- J'ai fait un * puis j'ai affiché le contenu de la pile avec .S
- elle contient maintenant 5 4 3 2, ce qui montre que les 2 valeurs du haut de la pile se sont multipliées entre elles, et qu'un pop a été effectué.
(quand vous mettez une valeur dans la pile, ça fait un push, quand vous la sortez ça fait un pop, c'est du Lifo.)
- la pile contient maintenant 5 4 3 2. un nouveau * devrait multiplier le 2 avec le 3 et faire un pop
- ça marche : la pile contient maintenant 5 4 6. un nouveau * devrait multiplier le 6 avec le 4 et faire un pop
- la pile contient 5 24. un nouveau * devrait multiplier le 24 avec le 5 et faire un pop
- la pile contient maintenant uniquement 120, qui est bien la factorielle de 5 : 1 x 2 x 3 x 4 x 5 = 120
Maintenant que j'ai pigé comment fonctionne la pile du Forth, je devrais pouvoir écrire la routine avec une boucle qui fait ça.
Je m'en souviendrai de mon premier jour de FORTH!