Vladimír Lukeš: METAFONT - Jak kreslit obrázky
Predchozi (Obsah) Dalsi

11. Podmínky a cykly

Někdy je v METAFONTovém programu nutné na základě aktuálního stavu proměnných rozhodnout o tom, které příkazy se mají provést. Pro tento účel existuje podmínka if: elseif: else: fi. Za if a elseif musí následovat výraz typu boolean a za dvojtečkami můžou být libovolné příkazy METAFONTu.


if i<5:
draw p;
...
elseif i=5:
draw p rotated 30;
...
else:
draw p rotated -45;
...
fi;


Nejsou-li potřeba, lze elseif a else vynechat.

Kromě logických operací and, or a not se ještě v podmínkách používají testovací příkazy. Je to příkaz known (unknown), který zjistí, zda je (není) uvedená proměnná definovaná, odd, test zda je číslo liché, a cycle, který ověří uzavřenost cesty.


if unknown mag:
mag:=1;
elseif mag>=5:
mag:=4.5;
fi;

if not(cycle p): p:=p..cycle; fi;


Dále se budeme v této kapitole zabývat cykly. Ty jsou v METAFONTu dvojího druhu, cyklus for s pevným počtem opakování a cyklus forever s ukončovací podmínkou. Definice obou dvou se ukončuje příkazem endfor.

Počet opakování u cyklu for je možno definovat dvěma způsoby. Zaprvé můžeme vypsat všechny požadované hodnoty řídící proměnné.


for i=1,3,7,13,17: ... endfor;


Druhou možností je určit počáteční a koncovou hodnotu proměnné a krok, s kterým bude narůstat nebo ubývat.


for i=16 step -2 until 4: ... endfor;


Jestliže je krok roven 1 (-1) používá se místo spojení step - until příkaz upto (downto).


for i=3 upto 15: ... endfor;


Cyklus forever nemá určen předem počet opakování, proto se musí někde mezi forever a endfor nacházet příkaz exitif, který zajistí při splnění stanovené podmínky opuštění cyklu. Uvnitř jediného cyklu může být i více ukončovacích podmínek.


p:=(origin-right*15u);
uhel:=0; duhel:=20;
forever:
draw p rotated uhel shifted stred;
exitif uhel>=180;
b1:=right*15u rotated uhel;
uhel:=uhel+duhel;
b2:=right*10u rotated uhel;
draw (b1-b2) shifted stred;
endfor;

obrazek 23



Predchozi
Converted by Selathco 0.85 on 08.06.1999 11:20
Dalsi