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 (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) ).)
Pavel Tišnovský aura:98
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.
Pavel Tišnovský aura:98
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?
Pavel Tišnovský aura:98
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.
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
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 :-)
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? :)
Viktor Kadlec
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 ;
VIKTOR KADLEC
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...
Pavel Tišnovský aura:98
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
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!
Pavel Tišnovský aura:98
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 :-)
Jakub Chalupnik
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
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)
Pavel Tišnovský aura:98
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.
Jakub Chalupnik
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? ;-)
Pavel Tišnovský aura:98
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.
ebik
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.
Zasílat nově přidané příspěvky e-mailem