5 4 3 2 1 * / + -
(Malé cvičení – jaký je výsledek poslední sekvence operací?).
.SOT v alun ej mekdelsyv ez ,lyb yb sipop isjensepjeN
Tento příkaz je velmi jednoduchý a už jsme jej použili na screenshotech – jedná se o prostou tečku: ., kterou je však nutné od ostatních příkazů oddělit alespoň jednou mezerou nebo jiným „bílým“ znakem.
Ono je to nepatrne slozitejsi, nekdy neni mezera potreba, pokud je jasny konec predchoziho slova.
0 .( zero). cr 1 ." one".
Posledni tecky na radku jsou rozeznany jako slovo.
Obrázek 16: Interaktivní otestování slova DOUBLE.
Pro double bych volil pro osmibit urcite dup +
A ten obrazek je vadny, vysledek ma byt 42. Neco se pokazilo.
(aha v 17. je to uz v poradku)
Inicializace smyčky do-loop je jednoduchá. Na zásobník operandů se nejprve uloží dvě hodnoty. První hodnotou se specifikuje počet opakování smyčky, druhou hodnotou (tj. hodnotou uloženou na vrcholu zásobníku) pak počáteční hodnota.
To si nemyslim. Plati ze druha hodnota je pocatecni, ale prvni neni pocet opakovani ale "cilova" hodnota. Nebo jeste lepe hodnota kterou kdyz prekrocis poslednim krokem ukonci smycku. Ono jeste zalezi na tom zda je KROK kladny nebo zaporny.
Pro zaporne je to VCETNE pro kladne VYJMA.
Podoba se to spis komplikovane FOR smycce, kde se pocita s pretecenim.
10 15 do i . loop
bude vypisovat 15 16 17 ... 32767 -32768 -32767 .. -1 0 1 2 3 4 5 6 7 8 9 pokud je stack 16 bitovy. Smycky funguji JEN uvnitr slov.
na modernim fortu (64 bit...) radeji spuste neco jako
: smycka ( krok -- ) 10 15 do i . cr dup +loop drop ; 1 cell 8 * 4 - lshift smycka
Da se rici ze pravidlo ukonceni smycky se da prevest na pouziti slova WITHIN, protoze jeho spravna implementace ma presne to chovani, vcetne ze zaporne jsou VCETNE.
Nejjednodušší forma smyčky do-loop, která se má opakovat desetkrát, vypadá následovně:
10 1 do loop
Jak je z předchozího úryvku kódu patrné, bude se smyčka provádět desetkrát, přičemž první hodnota počitadla bude rovna jednotce.
Fakt nevim zda fig FORTH na Atarku se chova jinak. Ale jak jsem popisoval vyse, tohle by melo udelat 9 opakovani. Jedna az devet.
Viz obrazek 20 a 21 kde je vstup 10 0 a opakuje se 10x a 6 1 a opakuje se 5x.
To same obrazek 23 a 24.
Skoda ze neni zvolen pocate treba 5 at je jasne ze prvni hodnota neni pocet opakovani ale vyjma hodnota pro kladny krok.
Ten WITHIN s implementavi jde najit na https://forth-standard.org/standard/core/WITHIN
A pokud ma smycka prezit i rekurzi tak pravdepodobne uklada cilovou a aktualni hodnotu na RAS.
Takze pro predcasne ukonceni potrebujete UNLOOP.
Pokud zjistite implementaci tak muzete nahradit slova jako I J K, nebo pridat dalsi.
Fakt je to dost komplikovany aby to fungovalo signed i unsigned. S kladnym i zapornym krokem.
Nekdy je snazsi pouzit jiny typ smycky. Treba FOR NEXT kterou nedefinuje standard je na vetsinu veci vhodnejsi. Ta ma jeden pocatecni parametr a snizuje se k nule (vcetne).
https://gforth.org/manual/1.0/Counted-Loops.html
A nebo nejakou BEGIN ... neco smycku.