2017-05-12 9 views
1

Certains gforth en ligne docs offrent une apparence complete description of base-execute's effects:base exécuter gforth syntaxe

base-execute  i*x xt u – j*x   gforth  “base-execute” 

execute xt with the content of BASE being u, and restoring the 
original BASE afterwards. 

Mais la syntaxe des effets apparaît comme une serrure sans clé - les liens de la page à rien qui décrit ce que i*x xt u – j*x signifie. La chasse se partial description of the syntax notation un, (qui nous dit que u est un nombre non signé et xt est un jeton exécution ), mais c'est pas encore assez pour comprendre i*x xt u – j*x. Comment fonctionne base-execute, et que fait-il?

Répondre

3

Pour comprendre ce que base-execute devez-vous comprendre execute et BASE. Je vais aussi expliquer comment lire i*x et j*x dans l'effet de pile.

execute fonctionne en prenant un jeton d'exécution xt et en l'exécutant. ' 1+ execute est le même que 1+ seul. La raison d'utiliser execute, cependant, est que vous pouvez passer xt sur la pile, au lieu de devoir le choisir à l'avance. Par exemple:

: exec-twice dup >r execute r> execute ; 
2 ' 1+ exec-twice . (this outputs 4) 

BASE est une variable qui contrôle quelle base numérique à utiliser pour l'entrée et la sortie. BASE est initialement 10. Donc 5 2 BASE ! . sort 101 (qui est 5 dans la base 2).

base-execute les met ensemble: il change BASE-u, exécute xt, puis restaure BASE à sa valeur précédente. Sa mise en œuvre pourrait ressembler à ceci:

: base-execute BASE @ >r BASE ! execute r> BASE ! ; 

Voici un exemple d'utilisation:

: squared (n1 -- n2) dup * ; 
: squares (n --) 0 do i squared . loop ; 

10 squares (0 1 4 9 16 25 36 49 64 81) 

: hex-execute (i*x xt -- j*x) 16 base-execute ; 

10 ' squares hex-execute (0 1 4 9 10 19 24 31 40 51) 

10 squares (0 1 ... 81 we're back to decimal) 

maintenant pour i*x xt u -- j*x:

La documentation de la notation de la pile vous avez lié a la plupart des informations que vous besoin de lire l'effet. i*x -- j*x signifie que quelque chose peut arriver à la pile, mais il ne précise pas quoi. Dans ce cas, l'effet de pile exact dépend de ce qu'est xt.

Pour connaître l'effet de la pile avec une donnée xt, et remplacer i*xj*x des deux côtés de l'effet de la pile de xt.

Par exemple, si xt est ' ., vous devriez regarder l'effet de pile ., qui est n --. Dans ce cas, vous pouvez penser à l'effet de pile de base-execute en tant que n xt-of-. u --.

+0

Très instructif, mais il n'est pas clair à partir de ce qui précède comment * utiliser * base-execute'. La réponse serait améliorée par une utilisation d'échantillon de base ou deux. – agc

+0

Bon point, je vais ajouter un exemple. –

+0

Merci! Simplement 'base-execute' est amusant, c'est-à-dire:' 10 'carrés 3 base-execute' pour ternaire, '10' carrés 95 base-execute', pour être cryptique, etc. – agc