Schau mal in dem angehängten PDF, dort habe ich wieder einige Sachen korrigiert. Unter anderem auch
t1 0 do i . loop next ;
Funktioniert in der alten Version nicht, da do..loop ein anderes Schleifenkonstrukt ist als for..next. Also entweder muss es heißen
t1 0 do i . loop ;
oder
t1 for i . next ;
Aber die do-Schleife einleiten und mit loop UND next abschließen funktioniert nicht, das merkt ja der Compiler, indem er versucht, nach der fertigen do..loop Schleife das next-Konstrukt aufzulösen. "struktur imbalance" bedeutet in desem Fall: next ohne for! Ist aber ein Tipfehler von mir und im obigen angehängten PDF korrigiert.
@w und !w geht nicht , müsste vermutlich w@ und w! heissen
Jo, habs gerade korrigiert.
Auf der Seite 15 hab ich nach Anlegen der konstant_1 mit 1024 noch ein Verständnisproblem:
konstante_1 | .s da kommt "4512" das müsste die Adresse sein , oder ?
wenn ich dann noch @ | .s mache kommt 67141682 , aber ich kriege irgendwie nicht mehr den Wert 1024, was mache ich falsch ?
Du machst da nix falsch, ich hab in der Korrektur nur den nächsten Fehler eingebaut...

Hab mir jetzt erstmal den Hive aufgebaut um das nachzuvollziehen (momentan war er wegen den Videosachen abgebaut). Also, mit
konstante_1 1024 ;
(Wichtig: "konstante_1" create/rot!

) wird ein entsprechendes neues Wort angelegt. Der numerische Wert in cyan compiliert ein numerisches Literal in das Wort und ; schließt/aktiviert das neue Wort. Ruft man konstante_1 nun auf, so wird das numerische Literal ausgeführt und hinterläßt den Zahlenwert auf dem Stack:
konstante_1 .
> 1024
Man kann auch mehrere Literale hintereinander schreiben, fällt mir grad ein:
konstanten 1024 393 235 ;
konstanten .s
> 1024 393 235
Cool, an so eine Möglichkeit habe ich noch nicht gedacht.
Hab auch gleich noch einen Fehler gefunden und korrigiert:
c 16 allot ;data
Der Zahlenwert 16 muss natürlich blau geschrieben werden. Hast du wahrscheinlich schon bemerkt, da er ja bei der Eingabe gleich spuckt...
Zum letzten Problem:
... a | .s | ! | .s
a ist eine 16 Bit Variable (word) und ein Wert wird mit w! geschrieben. Ein ! schreibt einen 32 Bit Wert, überschreibt damit aber den Header des nächsten Wortes und beschädigt das Wörterbuch, weshalb alle Wöretr weg sind. Das ist halt ein kleiner Nachteil bei Forth - man arbeitet immer als root.
Ich hoffe ich nerve nicht ..
Nee, ist sogar ganz gut so: selbst sieht man solche Fehler ja nicht mehr, und die Lust den Text wieder und wieder durchzuarbeite hält sich in Grenzen. Da ist das eine echte Hilfe, wenn es dich nicht stört. Du mußt nur Geduld mit mir und mental haben, alles ist da noch sehr "experimentell" und dient mir selbst dazu, Forth genauer kennenzulernen. Ich verändere es so wie mir neue Einsichten kommen. Aber gerade bei der Entwicklung spielt Forth schon mit seinen Muskeln: man kann schon interaktiv testen und Fehler suchen.
Ich hänge wieder eine neue Version vom Text an und hoffe, dass du die restlichen Fehler auch gleich noch findest. Kannst du nochmal ab "Kontrollstrukturen" durchschauen? Falls du einen "einsichtiges" kurzen Test hast, welcher dir vielleicht geholfen hat die Sachen zu verstehen, könntest du das ja mal posten. Ist wirklich ganz interessant für mich, und vielleicht baue ich es gleich im Text ein. Du kennst das ja sicher: wenn man es selbst programmiert hat, setzt man viele Dinge vorraus und der Text sollte ja auch für den Einstieg nutzbar sein.