Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Programovací jazyk Forth a zásobníkové procesory (6)

Marek Brunda
Marek Brunda (neregistrovaný)
15. 2. 2005 13:59 Nový

Nepřesnosti

celé vlákno
> 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 ;
Pavel Tišnovský aura:98
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.
Marek Brunda
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:)
Pavel Tišnovský aura:98
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
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.
Pavel Tišnovský aura:98
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
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:
( 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
Martin Kopta
13. 6. 2009 19:56 Nový

LCD misto GCD

celé vlákno

Funkce 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.

Zasílat nově přidané příspěvky e-mailem