2013-02-02 3 views
1

Donc, cela devrait être une question facile pour quelqu'un qui a déjà utilisé FORTH, mais je suis un débutant qui essaie d'apprendre à coder ce langage (et c'est très différent de C++). Quoi qu'il en soit, j'essaie simplement de créer une variable dans FORTH appelée "Height" et je veux qu'un utilisateur puisse entrer une valeur pour "Height" quand un certain mot "setHeight" est appelé. Cependant, tout ce que j'essaie semble échouer parce que je ne sais pas comment configurer la variable ni comment saisir l'entrée de l'utilisateur et le mettre dans la variable. J'espère que c'est un problème facile à résoudre, et toute aide serait grandement appréciée. Merci d'avance.Accepter l'entrée utilisateur pour une variable

Répondre

2

Jetez un oeil à des exemples d'entrée/sortie Rosettacode pour string or number input in FORTH:

chaîne Entrée

: INPUT$ (n -- addr n) 
    PAD SWAP ACCEPT 
    PAD SWAP ; 

Numéro d'entrée

: INPUT# (-- u true | false) 
    0. 16 INPUT$ DUP >R 
    >NUMBER NIP NIP 
    R> <> DUP 0= IF NIP THEN ; 
0

Un grand point à retenir pour votre auto -édition - C++ est fortement typecasted, Forth est le co Mplete opposé. Voulez-vous que Height soit une chaîne, un entier ou un flottant, et est-il signé ou non signé? Chacun a ses propres cas d'utilisation. Quoi que vous choisissiez, vous devez interagir avec la variable Hauteur avec le type que vous avez choisi. Pensez à ce que vos bits signifient à chaque fois.

A en juger par votre appel ATOI, je suppose que vous voulez que la valeur de Height soit un entier. Un nombre entier de 5 octets est inhabituel, donc je ne suis toujours pas certain. Mais ici, va de pair avec cette hypothèse:

VARIABLE Height 1 CELLS ALLOT 
VARIABLE StrBuffer 7 ALLOT 

: setHeight (--) 
    StrBuffer 8 ACCEPT 
    DECIMAL ATOI Height ! ; 

Les CELLULES appellent fait que vous créez une variable avec le nombre de bits de votre CPU préfère. L'appel DECIMAL s'assure que vous n'avez pas changé à HEX quelque part le long du chemin avant votre ATOI.

La création de la variable StrBuffer est l'une des nombreuses façons d'obtenir un espace de travail pour les chaînes. En supposant que votre CELL est 16 bits, vous aurez besoin d'un maximum de 7 caractères pour un entier signé 16 bits terminé par zéro - par exemple, "-32767 \ 0". Certaines implémentations ont PAD, qui pourrait être utilisé au lieu de créer votre propre tampon. Un autre mot courant est SCRATCH, mais je ne pense pas que cela fonctionne comme nous le voulons. Si vous continuez à créer votre propre espace tampon de chaîne, ce que j'aime personnellement parce que vous savez exactement combien d'espace vous avez, alors pensez à créer un grand tampon pour tous vos besoins de gestion de chaînes de mots. Par exemple:

VARIABLE StrBuffer 201 ALLOT 

Cela vous permet également d'avoir à faire l'hypothèse CELLULAIRE 16 bits, comme 200 caractères accommode facilement un entier signé 64 bits, dans le cas où est votre taille de la cellule de mise en œuvre maintenant ou un jour sur la route.

+0

Comme PAD est un mot standard dans l'ensemble de mots CORE, tous les éléments standard Forth sont requis pour avoir PAD. Puisque PAD est destiné à être utilisé comme une sorte de tampon temporaire, je ne vois pas l'intérêt de créer votre propre tampon pour cela. –

+0

@MichaelMorris Dans les applications intégrées conçues pour s'exécuter en tant qu'application compilée, PAD peut exister mais cela peut ne pas fonctionner. Par exemple, le dictionnaire compilé est écrit dur dans la mémoire Flash lorsqu'un périphérique est livré et n'est jamais interactif pour l'utilisateur.PAD est souvent implémenté en utilisant le haut du dictionnaire, mais s'il n'y a pas de support pour écrire dans Flash, l'écriture sur PAD échouerait. Aussi, FWIW, cela fait partie du jeu de mots CORE EXT, pas de CORE. – CivFan

Questions connexes