2017-10-13 7 views
1

J'essaie d'apprendre Forth directement dans un système embarqué et en utilisant Starting Forth par Leo Brodie comme un texte. La version de Forth que j'utilise est 328eForth (un port d'eforth au ATmega328) que j'ai flashé dans un Arduino Uno.Pourquoi "DO LOOP" manque-t-il dans 328eForth?

Il semble que les mots DO LOOP ne sont pas implémentés dans 328eForth - ce qui crée un problème dans mon apprentissage avec Brodie. Mais en regardant le dictionnaire en utilisant "WORDS" montre qu'une série de mots en boucle existe par ex. COMMENCER JUSQU'À CE QU'IL S'AGISSE DE LA PROCHAINE FOIS QU'IL S'AGISSE DE NOUVEAU, entre autres.

Mes questions sont les suivantes:

Q1 Pourquoi DO LOOP omis de 328eForth?

Q2 Est-ce que DO LOOP peut être implémenté dans d'autres mots existants? Si oui, comment s'il vous plaît et si non pourquoi? (Je suppose qu'il doit y avoir un très bonne raison pour l'omission de DO LOOP ...)

Q3 Pouvez-vous donner quelques exemples commentés des mots de boucle 328eForth?

+0

S'il vous plaît poser une question par poste. – meagar

Répondre

6

Q1: Un choix a été fait pour une construction de boucle différente.

Q2: Les mots FOR et NEXT remplissent une fonction similaire qui vient à 0 compte et exécute exactement le nombre de fois, y compris zéro.
Le (n2 n1 --) DO ... LOOP s'exécute toujours au moins une fois, ce qui nécessite une comptabilité (mentale) supplémentaire. Les gens se plaignent de cela depuis aussi loin que je me souvienne.

Q3: Le ForthArduino_1.pdf 382eforth documentation contient quelques exemples.


Edit: Ajout de quelques Q2 exposé

+2

Le principal problème avec DO LOOP se produit lorsque le pas de la boucle est négatif. Ou du moins c'est ce que certaines personnes pensent. Les premières versions d'iForth n'avaient que FOR NEXT, mais après deux ans de lutte, j'ai conclu que l'idée était contre-productive. Une boucle DO est beaucoup plus flexible qu'un FOR NEXT. –