Ačkoliv je robot Karel znám již dlouho, nikde jsme nenašli nějaký standard, jak má vypadat syntaxe tohoto jazyka. Každý Karel, se kterým jsme se setkali (Hlavně na 8-mi bitových počítačích.) měl syntaxi pokaždé jinou. Z tohoto důvodu jsme definovali svou vlastní syntaxi. Princip programování robota je jednoduchý. Robot zná elementární povely, a také nějaké příkazy řízení (podmínky, cykly). Další nové povely lze vytvářet jako posloupnosti již známých příkazů pomocí procedur. Nový povel, který je definován může být dále používán jako známý povel. Ještě vám jen doporučujeme nové procedury vytvářet v prostředí programu KAREL, ne v nějakých jiných textových editorech, i když zde tato možnost je. Ušetříte si tím mnoho nepříjemností. Všechny příklady, které jsou v této nápovědě nemusíte opisovat. Naleznete je v souboru help.krl, který je distribuován společně s Karlem. Doufáme, že syntaxe pro vás bude lehce pochopitelná.
Klíčová slova v jazyku Karel jsou elementární povely, podmínky, nebo cykly. Další klíčová slova jsou slova "Procedura", a "Jinak" Jazyk Karel nerozlišuje mezi velkými a malými písmeny. Tedy "KROK" je to samé jako "Krok", nebo "krok" (Nebo i třeba "kROk".).
Další: Procedura, Jinak
Elementární povely jsou povely, kterým robot Karel rozumí, a provede jako reakci na ně nějakou činnost. Jsou dále "nedělitelné". Neskládají se z žádných povelů, a naopak všechny ostatní uživatelem definované procedury jsou z nich složené. Elementární povely jsou:
Krok - Karel provede krok. Posune se tedy o jedno pole ve směru, ve kterém byl otočen, a svůj směr nezmění. Stál-li Karel před provedením povelu Krok před zdí, dojde k chybě.
Polož - Karel položí cihlu na pole, ne kterém stojí. Neposune se na žádné pole, ani se neotočí jiným směrem. Na jednom poli může ležet maximálně jedna cihla. Jestliže již na poli, na němž Karel stál před provedením povelu Polož, je cihla, dojde k chybě.
Zvedni - Karel vezme (odstraní) cihlu na poli, ne kterém stojí. Neposune se na žádné pole, ani se neotočí jiným směrem. Jestliže již na poli, na němž Karel stál před provedením povelu Zvedni, není cihla (Je prázdné.), dojde k chybě.
Vlevobok - Karel se otočí do leva. Zůstane stát na poli, na němž stál před provedením povelu, a nevezme, ani nepoloží žádnou cihlu.
Podmínky slouží pro lepší řízení robota. Pomocí podmínky lze oddělit posloupnost povelů, jenž se má provést v případě, že podmínka je pravdivá, od povelů, jenž zde mají provést není-li podmínka pravdivá. Syntaxe podmínky je:
PodmínkaDruhá možnost:
PodmínkaPodmínky jsou:
Cykly stejně jako podmínky slouží pro lepší řízení robota. Pomocí podmínky lze opakovat určitou posloupnost příkazů, dokud bude (resp. nebude) splněna určitá podmínka. Syntaxe cyklu:
Dokud podmínka
{
Posloupnost povelů, jenž se mají opakovaně vykonat, dokud podmínka platí.
}
Nebo druhá možnost:
Dokud NE podmínka
{
Posloupnost povelů, jenž se mají vykonat, dokud podmínka neplatí.
}
Podmínky mohou být tři, a jejich význam je jíž vysvětlen v kapitole o větvení.
Příklady cyklů:
Do programu pro robota Karla lze vkládat poznámky, které nejsou určeny pro Karla, ale pro programátora. Tyto poznámky Karel ignoruje, a slouží jen pro zpřehlednění programu. Poznámka začíná symbolem "#", a pokračuje až do konce řádku.
Příklad okomentovaného kousku programu:
Dokud NE JeZeď #Půjdu až ke zdi.
{
Krok # Tohle je ten krok.
# Nikdy se nestane: Polož
}
Procedura je nový povel, který se Karel naučí. Aby Karel mohl proceduru provést, musí znát všechny povely, ze kterých se skládá. K definování nové procedury slouží klíčové slovo Procedura. Za tímto slovem následuje textový řetězec, jenž označuje název nového povelu.
Pro název povelu platí:
Psaní poznámek mimo tělo procedury (Mimo závorky "{" , "}") není dovoleno.
Rekurzivní volání je vyvolání procedury (povelu) ze "sebe sama". Rekurze může být přímá, či nepřímá. Programovací jazyk Karel podporuje používání rekurze přímé, i nepřímé. Přímá rekurze by měla jít vždy převést na cyklus (V Karlovi).
Příklad přímé rekurze:
Procedura NaSever
{
JeSever
{}
JINAK
{
Vlevobok
NaSever # Procedura volá sama sebe
}
}
Dobře si promyslete, že skutečně (A hlavně proč?) tato procedura dokáže obrátit Karla k severu, ať je před jejím vyvoláním otočen jakkoliv! Jinou metodu řešení problému otočení na sever jsme nastínili v kapitole o cyklech.
Dalším druhem rekurze je rekurze nepřímá. Procedura opět zavolá sama sebe, ale použije k tomu jednu, nebo více procedur.
Příklad nepřímé rekurze.
Procedura r1
{
krok
r2
}
Procedura r2
{
JeZeď
{ }
JINAK
{
r1
}
}
Přijdete sami na to, co udělá Karel, pokud mu zadáte vykonat povel r1?
Chyby, jenž vzniknou během vykonávání nějaké procedury:
Bohužel, tady už je cihla, nemůžu sem nic položit. - Karel pokládá cihlu na pole, na kterém již cihla leží.
Nemohu nic vzít. Kde nic není, ani smrt nebere. - Snažíte se zvednout cihlu z pole, na kterém nic není.
Au, to bolí, narazil jsem hlavou do zdi! - Karel narazil hlavou do zdi. Tedy provedl povel "Krok" v momentě, kdy stál před zdí, a byl otočen směrem ke zdi.
XXX nemá definované tělo. - Někde používáte povel nazvaný XXX, který však Karel nezná.