> Při běhu programu se jméno proměnné vždy nahradí adresou, na které je uložena
> hodnota proměnné
Ve skutečnosti se adresou nahradí jméno každého slova, nikoliv jen proměnné. Navíc to není adresa, na níž je hodnota uložena, ale adresa, na níž je, zjednodušeně řečeno, uloženo slovo, které tuto hodnotu obsahuje ve svém těle.
Ještě k minulému dílu:
> Uvnitř smyčky je možné používat speciální klíčové slovo i,
> pomocí kterého...
Ve Forthu žádná speciální klíčová slova nejsou, což je právě jedno z jeho základních paradigmat. Slovo i je navíc ukázkou jednoho z nejtriviálnějších slov jazyka, které může být implementováno např. takto:
: i r> r@ swap >r ;
Názory k článku
Programovací jazyk Forth a zásobníkové procesory (6)
15. 2. 2005 15:05
Nový
Re: Nepřesnosti
celé vlákno
Ad adresa: toto vsak plati pouze pro Forthy, ktere provadeji klasicke neprime provadeni, tj. program se ve skutecnosti sklada pouze z neprimych adres. Moderni Forthy (moderni ve smyslu casovem, ne nutne kvalitativnim :-) vetsinou primo provadi preklad a tak jedina slova, ke kterym je zapotrebi znat adresu, je prave promenna.
Ad smycky: nespravne jsem se vyjadril; v te vete jsem pouze chtel vyjadrit, ze se opravdu jedna o "specialni" slovo, nikoli o pouhe oznaceni indexu (na prvni pohled to tak vypada). To "klicove" samozrejme neplati, dekuji za upozorneni.
Ad smycky: nespravne jsem se vyjadril; v te vete jsem pouze chtel vyjadrit, ze se opravdu jedna o "specialni" slovo, nikoli o pouhe oznaceni indexu (na prvni pohled to tak vypada). To "klicove" samozrejme neplati, dekuji za upozorneni.
Marek Brunda (neregistrovaný)
15. 2. 2005 17:51
Nový
Re: Nepřesnosti
celé vlákno
Máte pravdu, že spousta dnešních F. kompiluje přímo do strojového kódu, nicméně i tak se kromě primitiv, jejichž sémantika se zakompiluje pomocí několika málo instrukcí, musí často kompilovat i adresy slov, třeba za instrukcí CALL. Nešlo mi o to, že by tvrzení nebylo správné, ale o to, že to svádí k domněnce, že proměnná má jakoby nějaké zvláštní postavení oproti jiným slovům. Navíc, většina kompilátorů jakýchkoliv jazyků kompiluje adresu proměnné.
Abych jen nešťoural, Váš seriál se mi líbí a jsem rád, že se tu něco o tomto zajímavém jazyku objevilo:)
Abych jen nešťoural, Váš seriál se mi líbí a jsem rád, že se tu něco o tomto zajímavém jazyku objevilo:)
16. 2. 2005 8:24
Nový
Re: Nepřesnosti
celé vlákno
Me to stourani nevadi :-), naopak mam radost, ze jste me uporornil na nepresnosti, kterych jsem se pri psani dopustil.
Gimel (neregistrovaný)
10. 4. 2005 0:11
Nový
Faktorial pocita chybne.
celé vlákno
Zatim jsem neprisel na to jak z toho ven, ale od urciteho cisla vyse pocita faktorial chybne.
4 factorial cr . cr
12
ok
coz neni zrovna spravne cislo.
Pri kompilaci faktorialu poprve mi "rve" v okamziku rekurzivniho volani factorial, ze toto slovo nezna. To jsem vyresil nadefinovanim prazdneho slova faktorial a opetovnym prekladem...
Pokud factorial prelozim vicekrat, udela chybu pozdeji. Po dvojim (vlastne uz trojim) prelozeni dela chybu az u 6ky. Takhle ta rekurze fungovat nebude. Jak to resit korektne?
Pouzivam Gforth.
Diky moc za odpoved i za vas serial.
4 factorial cr . cr
12
ok
coz neni zrovna spravne cislo.
Pri kompilaci faktorialu poprve mi "rve" v okamziku rekurzivniho volani factorial, ze toto slovo nezna. To jsem vyresil nadefinovanim prazdneho slova faktorial a opetovnym prekladem...
Pokud factorial prelozim vicekrat, udela chybu pozdeji. Po dvojim (vlastne uz trojim) prelozeni dela chybu az u 6ky. Takhle ta rekurze fungovat nebude. Jak to resit korektne?
Pouzivam Gforth.
Diky moc za odpoved i za vas serial.
16. 5. 2005 16:17
Nový
Re: Faktorial pocita chybne.
celé vlákno
U nekterych dialektu Forthu (odpovidajicch napriklad ANS norme) se musi uvnitr slova, ktere se ma rekurzivne opakovat, misto jmena tohoto slova pouzit slovo "recursion". Je to tedy neco, jako nahrada za forward deklaraci u Pascalu.
MikRom (neregistrovaný)
9. 9. 2008 9:22
Nový
Re: Faktorial pocita chybne.
celé vlákno
Standardne treba na rekurziu pouzit slovo RECURSE. Ale su vynimky: Napriklad pri pouziti kompilatoru 4tH funguje definicia faktorialu presne tak ako ju popisuje pan Tisnovsky.
Tu je priklad ako to funguje standardne:
Tu je priklad ako to funguje standardne:
( Rekurzia vo FORTHe ) : fac dup 0= if drop 1 else \ dup 1- fac * \ toto funguje s kompilatorom 4tH dup 1- recurse * \ standardny pristup: RECURSE then ; 11 0 do i . ." ! = " i fac . cr loop
13. 6. 2009 19:56
Nový
LCD misto GCD
celé vláknoFunkce pro vypocet nejvetsiho spolecneho delitele se vetsinou nazyva GCD (greatest common divisor) a ne LCD. Take by byl vhodne doplnit, ze „pomocí známého postupu vypočítá největší společný dělitel“ je velmi nestastne napsano – jedna se o Eukliduv algoritmus.

