Nyní, když víte, že každý výrok ve Scheme je uzavřen v kulatých závorkách a že jméno funkce či operátor je v závorkách uveden na prvním místě, je třeba se naučit a vytvářet proměnné a funkce. Začneme proměnnými.
I když existuje více způsobů, jak promenné vytvářet, je preferována
metoda pomocí konstrukce let*
. Pokud znáte jiné
programovací jazyky, je tato metoda ekvivalentní definici seznamu
lokálních proměnných a rozsahu jejich platnosti. Jako příklad
deklarujeme dvě proměnné, a
a b
,
inicializované na hodnoty 1 a 2:
(let* ( (a 1) (b 2) ) (+ a b) )
nebo na jedné řádce:
(let* ( (a 1) (b 2) ) (+ a b) )
![]() |
Poznámka |
---|---|
Používáte-li Script-Fu konzoli, je třeba zadat vše na jednom řádku. V ostatních případech je však dobré používat přehledné odsazování pro zvýšeni čitelnosti kódu. Více si o tom povíme v části věnované bílým znakům. |
Takto jsou deklarovány dvě lokální proměnné,
a
a b
,
inicializovány a je vypsán jejich součet.
Jistě jste si všimli, že součet (+ a b)
byl zapsán
uvnitř závorek výrazu let*
, nikoliv za nimi.
Je to tak, protože výrok let*
definuje oblast skriptu, ve
které jsou deklarované proměnné použitelné. Pokud by byl výraz
(+ a b)
až za výrazem (let* ...)
, vznikla by
chyba, protože deklarované proměnné jsou platné pouze uvnitř výroku
let*
; jedná se o tzv. lokální proměnné.
Zápis výroku let*
je obecně následující:
(let* (proměnné
)výrazy
)
Proměnné jsou deklarovány v závorkách, např. (a 2)
,
a výrazy jsou jakékoliv platné Scheme výrazy. Nezapomeňte, že takto
deklarované proměnné jsou platné pouze uvnitř výroku
let*
– jsou to lokální proměnné.
Již dříve jsme poznamenali, že je dobré kód skriptů zpřehlednit použitím odsazování. Skutečně se to vyplatí. Ve Scheme není s odsazováním žádný problém; protože interpretr bílé znaky (tj. mezery, tabulátory, nové řádky a podobné) zcela ignoruje, je proto možné je pro formátování a zpřehlednění skriptu libovolně používat. Ve Script-Fu konzoli ale musíte psát vždy celý výraz na jeden řádek; vše mezi otevírací a uzavírací závorkou výrazu musí být ve Script-Fu konzoli na jednom řádku.
Často je třeba změnit hodnotu již inicializované proměnné.
Ke změně hodnoty proměnné se používá výrok set!
:
(let* ( (theNum 10) ) (set! theNum (+ theNum \ theNum)) )
Pokuste se odhadnout, co výše uvedený výrok dělá, a pak ho zadejte do Script-Fu konzole.
![]() |
Poznámka |
---|---|
Znak |
Nyní, když umíte pracovat s proměnnými, se podíváme na funkce. K deklaraci funkce slouží následující syntaxe:
(define (jmeno
seznam-parametru
)vyrazy
)
kde jmeno
je jméno funkce,
seznam-parametru
je mezerami
oddělený seznam jmen parametrů funkce a
vyrazy
je řada výrazů, které
funkce při svém zavolání vykoná. Například:
(define (AddXY inX inY) (+ inX inY) )
Tato funkce se jmenuje AddXY
a má dva parametry,
proměnné inX
a inY
. Funkce
oba své parametry sečte.
Pokud jste programovali v jiných imperativních jazycích (např. v C/C++, Javě, Pascalu atd.), možná jste si všimli, že definice funkce neobsahuje ve srovnání s jinými jazyky řadu položek.
Parametry nemají žádné typy (nejsou deklarované jako řetězce, celá čísla apod.). Scheme je jazyk bez typové kontroly. To je velmi praktické a usnadňuje rychlé psaní skriptů.
Navíc se také ve Scheme nemusíme zabývat vracením výsledku funkce, vrácenou hodnotou při zavolání funkce je poslední výrok. Zadejte výše uvedenou funkci do Script-Fu konzole a pak zkuste následující:
(AddXY (AddXY 5 6) 4)