Příkazy cyklů v AutoLISPu

Přehled informací

Typy cyklů používané v AutoLISPu

Cykly v programu slouží k opakovanému provádění úseku kódu. AutoLISP používá dva typy cyklů:

Cykly repeat

Cykly repeat slouží ve funkcích AutoLISPu k provádění určité skupiny příkazů po pevný, předem daný počet opakování. Cyklus repeat má proto smysl například při provádění několika spolu souvisejících výpočtů, při práci s elementy na obrazovce nebo při zpracování určité množiny vstupních dat.

Syntaxe příkazu

  (repeat int [expr...])

Argumenty příkazu

Po vykonání všech příkazů v cyklu se hodnota kroku přičte k čítači int. V tomto okamžiku se buď příkazy v cyklu provedou znovu (na základě stejného testu, podle kterého se cyklus vykonal i původně) nebo se cyklus ukončí a běh pokračuje následující příkazem za funkcí repeat.

Příklad použití příkazů repeat

Následující úsek programu nejprve nastaví střed a poloměr kružnic. Dále je nastavena proměnná počet - pomocná proměnná pro kreslení kružnic. Následuje tělo cyklu, které je vykonáno 5x. V každém průchodu cyklem je vykreslena jedna kružnice:

  (setq stred '(1.1 2.2 0.0))
  (setq polomer 50)
  (setq pocet 5)
  (repeat 5) 
    (setq pol_kresl (+ polomer (*  3 (- pocet 1)))) 
                ;;; nastavení aktuálního poloměru kružnice 
    (command "_circle"  stred pol_kresl)
                ;;; vykresli kruznici 
    (setq pocet (- pocet 1)) 
                ;;; zmenši počet  kružnic o 1 
  );_ konec repeat

Cykly while

Cyklus while představuje alternativu k cyklu repeat. Opakovaně vyhodnocuje výrazy, dokud testexpr není rovná hodnotě nil. Cykly while tedy mají smysl zejména v případech, kdy nemůžeme dopředu určit počet opakování.

Syntaxe příkazu

  (while testexpr [expr...])

Argumenty příkazu

Příklad opakování příkazů, dokud je výsledek vyhodnocení podmínky True

Následující úsek programu nejprve nastaví střed a poloměr kružnic, následuje test podmínky jestli je pocet kružnic, proměnná pocet > 0, pokud ano program vstoupí do smyčky a vykreslí kružnici. Na konci cyklu je proměnná pocet zmenšena o 1. Cyklus se vrátí na začátek a je opět testována podmínka:

  (setq stred '(1.1 2.2 0.0))
  (setq polomer 50)
  (while (> pocet 0) 
               ;;; dokud je co kreslit opakuj 
    (setq pol_kresl (+ polomer (*  3 (- pocet 1)))) 
               ;;; nastavení aktuálního poloměru kružnice 
    (command "_circle"  stred pol_kresl)
               ;;; vykresli kruznici 
    (setq pocet (- pocet 1)) 
               ;;; zmenši počet  kružnic o 1 
  );_ konec while 

U příkazů, kterým nerozumíte je možné po kliknutí nad příkazem zobrazit referenční příručku.