Syntaxe jazyka KAREL


Vítáme vás v nápovědě syntaxe jazyka KAREL!       Vyberte si položku v obsahu.

Obsah

  • Úvod
  • Klíčová slova
  • Elementární povely
  • Podmínky (Větvení)
  • Cykly
  • Poznámky
  • Procedury
  • Rekurzivní volání
  • Časté chyby

  • Úvod

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

    Autoři

    Klíčová slova

    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".).


    Elementární povely

    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 (Větvení)

    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ínka
    {
    Posloupnost povelů, jenž se mají provést v případě, že podmínka platí. Nemusí zde být žádný povel, ale musí zde být složené závorky.
    }
    JINAK
    {
    Posloupnost povelů, jenž se mají provést v případě, že podmínka neplatí. Nemusí zde být rovněž žádný povel, ale musí zde být složené závorky. V případě, že by za slovem JINAK měly být jen prázdné závorky, je lepší slovo JINAK vynechat. Viz druhá možnost.
    }

    Druhá možnost:

    Podmínka
    {
    Posloupnost povelů, jenž se mají provést v případě, že podmínka platí. Nemusí zde být žádný povel, ale musí zde být složené závorky.
    }

    Podmínky jsou:

    Příklady:

    Cykly

    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ů:


    Poznámky

    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ž
    }


    Procedury

    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í:

    Například povolené názvy jsou: "Krok3", "a", "Vpravobok", atd...
    Například nepovolené názvy jsou: "%er", "Krok", "Dvoj krok", atd...
    Samotné tělo procedury (Posloupnost příkazů, jenž se mají provést.) je uzavřeno ve složených závorkách.
    Příklad procedury:
    Procedura pokus1
    {
       #Schválně vrazím do zdi
       Dokud NE JeZeď
       {
         krok
       }
       krok # BUM!!!!!!!!!
    }

    Upozornění:

    Psaní poznámek mimo tělo procedury (Mimo závorky "{" , "}") není dovoleno.


    Rekurzivní volání

    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?


    Časté chyby

    V této kapitole poukážeme na časté chyby, které mohou nastat i vám při psaní programů pro robota Karla. Zde vám nabídneme několik rad, jak předejít chybám.
    Vysvětlení některých chybových hlášek:
    Nečekané ukončení zdrojového textu procedury XXX - V dané proceduře došlo k ukončení těla procedury, ačkoliv syntaxe konec nedovoluje. Zkontrolujte například, jestli všechny podmínky, nebo cykly mají správně závorky.
    XXX ve svém těle někde postrádá začátek bloku (znak "{") - Zkontroluje, jestli znak "{" je skutečně všude, kde je očekáván. V cyklech, podmínkách, za slovem "JINAK".
    XXX ve svém těle někde postrádá konec bloku (znak "}") - Zkontroluje, jestli znak "}" je skutečně všude, kde je očekáván. V cyklech, podmínkách, za slovem "JINAK".
    Špatné použití klíčového slova NE v proceduře XXX - Zkontrolujte, zda před každým slovem "NE" v proceduře XXX je skutečně slovo "DOKUD", a za slovem "NE" následuje podmínka.
    Špatné požití klíčového slova JINAK v proceduře XXX- Zkontrolujte, zda před každým slovem "JINAK" v proceduře XXX je podmínka, a za slovem "NE" následuje závorka "{".
    Za klíčovým slovem DOKUD (resp. DOKUD NE) je očekávána podmínka v proceduře XXX - Zkontrolujte, zda za každým slovem dokud, (resp. Dokud NE) následuje podmínka.
    Jako název procedury nelze použít klíčové slovo XXX - Změňte název procedury. Název procedury nesmí být klíčové slovo XXX.

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



    Vtip dne:  Víte co má společného jazyk Smalltalk s jazykem pro robota Karla?            Oba používají pro poznámky stejný symbol.