Názory k článku
Programovací jazyk Forth a zásobníkové procesory (5)
uživatel si přál zůstat v anonymitě
8. 2. 2005 0:42
Nový
Komentáře
celé vlákno
Možná by nebylo od věci začít i ty nejjednodušší slova/programy hned od počátku opatřovat typicky forthovskými komentáři, ať je vidět, co které slovo očekává na zásobníku a co na něj pro změnu vrací. (Stupidní příklady: swap ( n1 n2 -- n2 n1) nebo @ ( a -- (a) ).)
8. 2. 2005 8:08
Nový
Re: Komentáře
celé vlákno
Máte pravdu, od příštího dílu, ve kterém se již budou probírat složitější slova, budu "zásobníkové diagramy" (na lepší překlad jsem prozatím nepřišel) používat.
uživatel si přál zůstat v anonymitě
8. 2. 2005 8:24
Nový
jak dostat hodnoty ze smycky?
celé vlákno
Pochopil jsem spravne, ze na konci tela smycky musi byt na zasobniku totez, co na jeho zacatku, aby loop vedel k cemu pricitat a kam az jit? Jak pak dostat ven (do programu, nikoliv na monitor) hodnoty? zvlast, kdyz bude vice nez jedna (ktera by sla dostat ven rotaci prez tri prvky)?
uživatel si přál zůstat v anonymitě
8. 2. 2005 9:08
Nový
Re: jak dostat hodnoty ze smycky?
celé vlákno
Nevím, jestli chápu úplně správně váš dotaz, ale cyklus pro svou práci využívá zásobník návratových adres, tzn. že s uživatelským zásobníkem můžete během vykonávání cyklu pracovat naprosto nezávisle.
8. 2. 2005 9:37
Nový
Re: jak dostat hodnoty ze smycky?
celé vlákno
Pro počítaný cyklus je počitadlo uloženo na zásobníku návratových adres (return stack), takže svoje výpočty na zásobníku operandů nemusíte "vyrovnávat". Pomocí slova i (pouze íčko) je však možné počitadlo uložit na zásobník operandů a tam s ním pracovat, například vytisknout jeho hodnotu.
uživatel si přál zůstat v anonymitě
8. 2. 2005 13:32
Nový
deja vu
celé vlákno
"dup", "roll" - to mi neco pripomina. Je to nahoda, nebo se opravdu PostScript Forthem inspiroval?
8. 2. 2005 14:45
Nový
Re: deja vu
celé vlákno
PostScript je opravdu trosicku upraveny Forth. Uz jsem o tom psal v jednom z prvnich dilu. Upravy spocivaji hlavne v odlisnostech v datovych typech, jinym principem tvorby slov a samozrejme mnozstvim hotovych slov (kresleni usecek, bitmap, prikaz show atd.)
Duvod, proc je PostScript odvozen od Forthu je nasledujici: jednoduchy a rychly interpreter, snadna rozsiritelnost, tvorba maker (viz vystupy z AutoCADu), snadna implementace v HW tiskaren.
Duvod, proc je PostScript odvozen od Forthu je nasledujici: jednoduchy a rychly interpreter, snadna rozsiritelnost, tvorba maker (viz vystupy z AutoCADu), snadna implementace v HW tiskaren.
uživatel si přál zůstat v anonymitě
8. 2. 2005 22:02
Nový
vnořené cykly
celé vlákno
Mě by zajímalo, jak by to bylo u více vnořených cyklů třeba do loop do sebe. Jak se třeba dostanu do obou řídících proměnných obbou cyklů, když mám jenom jedno slovo i.
uživatel si přál zůstat v anonymitě
8. 2. 2005 23:15
Nový
Re: vnořené cykly
celé vlákno
No, ono existuje take slovo j pro druhý vnořený cyklus, pro další vnořené cykly máte možnost si vlastní slova doprogramovat:-)
Viktor Kadlec (neregistrovaný)
9. 2. 2005 0:55
Nový
Re: vnorené cykly
celé vlákno
Tady bych nijak nepremyslel, budme radi, ze aspon muzeme dostat iterator aktualni smycky do zasobniku. Pokud nebudeme plnit zasobnik, je to bez problemu. Pokud ano, budeme muset porad swapovat nebo rotovat :-( , zalezi na zpusobu plneni zasobniku. Par prikladu:
: cykl 5 0 do cr i 3 0 do dup . loop drop loop cr ; cykl
( tato veticka vypise pet radku, na kterych se znazorni trikrat po sobe se opakujici obsah iteratoru, je zde take videt, ze to budeme po sobe uklizet )
: cykl 6 1 do cr i i i + i do dup 10 * i + . loop drop loop cr ; cykl
( Po zadani dostaneme na vystupu trojuhelnik z dvojcifernych cisel. Prvni cifra je vnejsi iterator a druha je vnitrni. )
: cykl 4 1 do i 5 0 do dup 10 * i + swap loop drop loop ; cykl
( nyni mame v zasobniku 15 hodnot, po iteratoru ani stopy )
: cykl 4 1 do cr 5 0 do . loop loop cr ; cykl
( pro prehlednost si muzeme obsah zasobniku prohlednout pomoci stejneho cyklu )
... radost pracovat ve Forthu :-)
: cykl 5 0 do cr i 3 0 do dup . loop drop loop cr ; cykl
( tato veticka vypise pet radku, na kterych se znazorni trikrat po sobe se opakujici obsah iteratoru, je zde take videt, ze to budeme po sobe uklizet )
: cykl 6 1 do cr i i i + i do dup 10 * i + . loop drop loop cr ; cykl
( Po zadani dostaneme na vystupu trojuhelnik z dvojcifernych cisel. Prvni cifra je vnejsi iterator a druha je vnitrni. )
: cykl 4 1 do i 5 0 do dup 10 * i + swap loop drop loop ; cykl
( nyni mame v zasobniku 15 hodnot, po iteratoru ani stopy )
: cykl 4 1 do cr 5 0 do . loop loop cr ; cykl
( pro prehlednost si muzeme obsah zasobniku prohlednout pomoci stejneho cyklu )
... radost pracovat ve Forthu :-)
uživatel si přál zůstat v anonymitě
9. 2. 2005 9:12
Nový
Re: vnorené cykly
celé vlákno
>nyni mame v zasobniku 15 hodnot, po iteratoru ani stopy
Prominte, ale casto zjistujete po cyklu pocet iteraci, ktery znate jiz pred vstupem do cyklu? :)
Prominte, ale casto zjistujete po cyklu pocet iteraci, ktery znate jiz pred vstupem do cyklu? :)
Viktor Kadlec (neregistrovaný)
9. 2. 2005 14:02
Nový
Re: vnorené cykly
celé vlákno
Ne, proc? Jde mi jenom o to, abych to po sobe uklidil, proto jsem napsal: "... po iteratoru ani stopy." Kdyz je toho vic, tak to s tim uklidem neni sranda :-(
uživatel si přál zůstat v anonymitě
9. 2. 2005 15:43
Nový
Re: vnorené cykly
celé vlákno
Nac delat veci jednoduse, kdyz to jde slozite:)
: cykl 4 1 do 5 0 do j 10 * i + loop loop ;
: cykl 4 1 do 5 0 do j 10 * i + loop loop ;
VIKTOR KADLEC (neregistrovaný)
29. 5. 2007 11:19
Nový
Re: vnorené cykly
celé vlákno
MNO... PO DELSI PRAXI S FORTHEM - JESTE JSEM NEPOUZIL VNORENY CYKLUS V JEDNOM SLOVE. A TO DELAM I S GRAFIKOU...
KDYZ PISU VE FORTHU, DBAM NA TO, ABY SLO POCHOPIT VYZNAM KAZDEHO SLOVA. VIDEL SNAD NEKDO DOKUMENTACI K FORTHOVSKEMU RESENI? MYSLITE ZE ANO? NENE, TO JE DOKUMENTACE PROBLEMATIKY...
KDYZ PISU VE FORTHU, DBAM NA TO, ABY SLO POCHOPIT VYZNAM KAZDEHO SLOVA. VIDEL SNAD NEKDO DOKUMENTACI K FORTHOVSKEMU RESENI? MYSLITE ZE ANO? NENE, TO JE DOKUMENTACE PROBLEMATIKY...
9. 2. 2005 7:40
Nový
Re: vnořené cykly
celé vlákno
Pokud máte více vnořených cyklů, lze používat slova "i" a "j", některé implementace Forthu mají zabudované i "k". Mnohem lepší je však vnitřní smyčky vytvořit jako samostatná slova, vyhnete se tak problémům při přístupu k nižším úrovním zásobníku (někdy to je samozřejmě nemožné nebo neefektivní, záleží na situaci).
Pavel Žampach (neregistrovaný)
9. 2. 2005 11:49
Nový
DO .. LOOP
celé vlákno
V článku je IMHO chyba:
10 1 DO ... LOOP
proběhne jen 9x, pro hodnotu 10 už NE!
10 1 DO ... LOOP
proběhne jen 9x, pro hodnotu 10 už NE!
9. 2. 2005 12:25
Nový
Re: DO .. LOOP
celé vlákno
ano, máte naprostou pravdu, udělal jsem klasickou programátorskou chybu +-1 :-)
10. 2. 2005 7:11
Nový
+/-1
celé vlákno
Docent Honzik nam vzdycky rikal, ze chyby o jednicku se nepocitaji jako chyby :-)
Pavel Žampach (neregistrovaný)
10. 2. 2005 7:40
Nový
Re: +/-1
celé vlákno
Pan docent je asi tolerantní pán, můj překladač CMP Forth je bohužel jiného názoru (píšu v něm krásně mrňavé programy pod MS-DOS pro svého miláčka HP200LX)
10. 2. 2005 8:04
Nový
Re: +/-1
celé vlákno
Taky jsem prosel kurzem pana Honzika (s odstupem casu se mi zdaji cim dal vic zajimave a prinosne), ale ono jde o to, ze nektere jazyky ty chyby castecne odchytnou pri behu a u nekterych jazyku se na ne prijde az pri provozovani programu. Forth patri, spolu s C-ckem mezi jazyky, ktere davaji programatorum naprostou volnost, ale take zodpovednost za to, co napisou.
10. 2. 2005 16:34
Nový
Re: +/-1
celé vlákno
Me se ze vsech jeho kurzu zachovalo v pameti jen uslovi "defenzivni programovani" a casto se jim ridim - jinak bych rekl, ze jsem jeho vlivem (bohuzel?) pomerne nedotcen.
To, ze se chyby o jednicku nepocitaji bylo tusim platne jen u zkousek - pokud by algoritmus ujel o jeden krok, tak se to tolerovalo.
BTW: taky jste meli na Hruskovych prednaskach o RISCu "hodne" a "zle" bryle? ;-)
To, ze se chyby o jednicku nepocitaji bylo tusim platne jen u zkousek - pokud by algoritmus ujel o jeden krok, tak se to tolerovalo.
BTW: taky jste meli na Hruskovych prednaskach o RISCu "hodne" a "zle" bryle? ;-)
11. 2. 2005 8:17
Nový
Re: +/-1
celé vlákno
Z prednasek pana Hrusky si krome jeho skveleho vykladu Lambda kalkulu (vysvetlovani na mimozemstanech) pamatuji hlavne vetu: "Syntaxi C++ povazuji za spatny vtip".
O RISCu ani nevim, ze by vypravel - bud to zrovna ten semestr neprobiral, nebo jsem cirou nahodou :-) na te prednasce nebyl.
O RISCu ani nevim, ze by vypravel - bud to zrovna ten semestr neprobiral, nebo jsem cirou nahodou :-) na te prednasce nebyl.
ebik (neregistrovaný)
16. 3. 2005 9:06
Nový
Re: DO .. LOOP
celé vlákno
Obavam se (podle prikladu, ze 10 10 do loop nema zkoncit), ze ta prvni 10 neni pocet opakovani ale cislo, na kterem ma do loop zkoncit. To by vysvetlovalo ze 10 1 do loop probehne 9x, (coz je chyba +-1) ale pak by 10 5 do loop probehl 5x coz uz by asi ani pan Honzik netoleroval.

