Jedným z nich je Forth ktorý vytvoril pôvodne jediný človek Charles Moore a používal ho na riadenie astronomických prístrojov. Používa celkom unikátny spôsob vytvárania programu. Je možno na prvý pohľad divný ale takýto jazyk má mnoho výhod a používa sa skôr v zabudovaných počítačoch .
Forth na svoju prácu používa zásobníkovú pamäť typu zásobník LIFO , tj niečo ako zásobník na náboje. Operácie sa vykonávajú s údajmi ktoré sú uložené v zásobníku a výsledok sa znovu ukladá na vrchol zásobníka.
Na zápis matematických operácií sa používa tzv. postfixová notácia ( RPN - obrátená poľská logika ).
Teda v editore sa čísla najprv uložia do zásobníka a potom sa povie čo s nimi má počítač spraviť.
2 ok
3 ok
+ . 5 ok
bodka slúži na výpis hodnoty ktorá sa nachádza na vrchole zásobníka.
Zaujímavý je spôsob ako sa vytvára program. Základom Forthu je tzv. slovo. Niektoré su zabudované a nové sa dajú tvoriť.
Napríklad ak chceme vypočítať druhú mocninu , teda násobiť číslo sebou samým, môžeme to urobiť nasledovne:
: umocni dup * . ; ok
vytvorili sme nové slovo ( : znamená že vytvárame nové slovo ) kde sme najprv pomocou dup zduplikovali číslo na vrchole zásobníka, potom sme tie čisla vynásobili a . znamená vypísanie výsledku na vrchole zásobníka.
Ak zadáme číslo a za ním nové slovo umocni, dostaneme druhú mocninu.
: umocni dup * cr . cr ; ( pred . sme dali cr teda odriadkovanie aby to nevypisovalo do jedneho riadku |
4 umocni
16
ok
2 umocni
4
ok
Slová sa dajú použiť v definícii ďalšieho slova a takto sa dá program skladať postupne z najnižšej až po najvyššiu úroveň. T.j. navrhuje sa zhora dole ale programuje zdola hore .
Pre môj príklad s výpočtom čistej mzdy som postupoval podobne.
Môj Forth bol len celočíselný , tak som to trochu upravil a % rátam tzv škálovaním, tj nie krát % deleno 100 ale sumy percent som znásobil 10 a potom delím 1000.
Výsledkom návrhu je zavolanie výpočtu zadaním hrubej mzdy ( ktorá sa uloží na zásobník) , najvyšie slovo vykoná načítanie hodnoty do premennej a zavolá výpisy hodnôt ktoré v sebe volajú ich výpočet.
Celé to vyzerá takto:
variable hruba ( vytvorenie premennej )
: nem hruba @ 14 * 1000 / ; ( vypocet sumy nemocenského poistenia, zavináč je tzv fetch , zavolá hodnotu premennej na vrchol zásobníka)
: sta hruba @ 40 * 1000 / ;
: inv hruba @ 30 * 1000 / ;
: nez hruba @ 10 * 1000 / ;
: zdr hruba @ 40 * 1000 / ;
: odv hruba @ 134 * 1000 / ;
: dan hruba @ odv - 375 - 19 * 100 / ;
: mzda hruba @ odv - dan - ;
: vyphruba ." Hruba mzda je " hruba @ . ;
: vypnem ." Nemocenske je " nem . ; ( vypíše text a zavolá slovo nem a vypíše bodkou hodnotu ktorú zanechalo na vrchole zásobníka )
: vypsta ." Starobne je " sta . ;
: vypinv ." Invalidne je " inv . ;
: vypnez ." Poistenie v nezam je " nez . ;
: vypzdr ." Zdravotne poistenie je " zdr . ;
: vypdan ." Dan z prijmu je " dan . ;
: vypmzda ." Cista mzda je " mzda . ;
: vypis cr vyphruba cr vypnem cr vypsta cr vypinv cr vypnez cr vypzdr cr vypdan cr vypmzda cr ; ( odriadkuje a vola slová výpisov potrebných hodnôt )
: nacitajmzdu hruba ! ; ( toto slovo načíta hodnotu z vrcholu zásobníka do premennej hruba , robí to ten výkričník)
: zratajcistu nacitajmzdu vypis ; (tuto síce mohlo byť aj to načítanie ale je to nové slovo v ktorom sa načíta hodnota a zavolá výpis)
Celé to potom funguje tak, že sa zadá hrubá mzda ktorá sa uloží na vrchol zásobníka a zavolá slovo zratajcistu . A kaskáda sa spustí.
1000 zratajcistu
Hruba mzda je 1000
Nemocenske je 14
Starobne je 40
Invalidne je 30
Poistenie v nezam je 10
Zdravotne poistenie je 40
Dan z prijmu je 93
Cista mzda je 773
ok
2000 zratajcistu
Hruba mzda je 2000
Nemocenske je 28
Starobne je 80
Invalidne je 60
Poistenie v nezam je 20
Zdravotne poistenie je 80
Dan z prijmu je 257
Cista mzda je 1475
ok

Jednotlivo vytvorené slová sa vždy dajú volať samostatne a môžete si kontrolovať či robia to čo treba. Vždy je potrebné vedieť čo je v zásobníku lebo okolo necho sa to celé vo Forth točí, teda skôr posúva...

Zvyknúť si na celkom iným spôsob je ako prepisovať texty do klinového písma ale ľudia ktorí to vymysleli to vymysleli dobre, len ináč. Nenadarmo sa jedna z knih popisujúca filozofiu jazyka volá "Thinking Forth".