Teraz, keď už viete, že každý výrok v Scheme je uzavretý v okrúhlych zátvorkách a že meno funkcie alebo operátora je uvedené na prvom mieste, musíte sa naučiť ako vytvoriť a používať premenné. To isté platí aj o tvorbe a používaní funkcií. Začnime s premennými.
Hoci existuje viacero spôsobov deklarácie premenných, najpoužívanejšia je metóda pomocou zápisu let*. Ak poznáte niektoré ďalšie programovacie jazyky, tento zápis je ekvivalentný definovaniu zoznamu lokálnych premenných a rozsahu ich platnosti. Napríklad deklarácia dvoch premenných, a a b, inicializovaných na hodnoty 1 a 2:
(let* ( (a 1) (b 2) ) (+ a b) )
alebo ako jednoriadkový zápis:
(let* ( (a 1) (b 2) ) (+ a b) )
Poznámka | |
---|---|
Ak používate konzolu Script-Fu, budete musieť všetko napísať do jedného riadku. Avšak za účelom zvýšenia čitateľnosti kódu je dobré používať rovnaký spôsob odsadenia. Viac si o tom povieme v časti zameranej na biele znaky. |
Takto sú deklarované dve lokálne premenné a a b, sú inicializované, a nakoniec je zobrazený ich súčet.
Určite ste si všimli, že súčet (+ a b)
sme zapísali vo vnútri zátvoriek výrazu let*
, nie za nimi.
Je to tak preto, lebo výrok let*
definuje oblasť skriptu, v ktorej sú deklarované premenné použité. Ak výrok (+ a b)
napíšete za výrok (let* …)
, vznikla by chyba, lebo deklarované premenné sú platné len vnútri výroku let*
. V tomto prípade sa jedná o premenné, ktoré sa medzi programátormi nazývajú lokálne premenné.
Všeobecný zápis výroku let*
je nasledujúci:
(let* (premenné
)výrazy
)
kde premenné sú deklarované vnútri zátvoriek, napr. (a 2)
, a výrazy sú akékoľvek platné výrazy Scheme. Nezabudnite, že premenné deklarované na tomto mieste sú platné iba vnútri výroku let*
. Sú to lokálne premenné.
Už sme spomínali, že svoj kód budete chcieť sprehľadniť a usporiadať pomocou odsadenia. Je to dobrá myšlienka a pre Scheme to nie je problém. Interprétor Scheme biele znaky ignoruje. Z toho dôvodu máte v používaní bielych znakov voľnú ruku. Svoj kód môžete ich použitím sprehľadniť a usporiadať podľa potreby. Avšak ak pracujete v okne Konzola Script-Fu, celý výraz musíte napísať na jeden riadok. To znamená, že celý výraz od prvej po poslednú zátvorku musí byť na jednom riadku.
Často sa stáva, že inicializovanej premennej musíte neskôr v skripte zmeniť hodnotu. Hodnotu premennej zmeníte pomocou výroku set!
:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
Skúste si najprv typnúť, čo uvedený výrok vykoná a až potom ho zadajte do konzoly Script-Fu.
Poznámka | |
---|---|
Znak „ |
Teraz, keď ste sa už naučili používať premenné, skúsme sa pozrieť na nejaké funkcie. Nasledujúca syntax slúži na deklaráciu funkcie:
(define (meno
zoznam parametrov
)výrazy
)
kde meno
predstavuje meno funkcie, zoznam parametrov
je miesto na pomenovanie parametrov funkcie a výrazy
predstavujú súbor výrazov, ktoré funkcia vykoná pri svojom zavolaní. Napríklad:
(define (AddXY inX inY) (+ inX inY) )
AddXY
je meno funkcie a inX
a inY
predstavujú premenné. Táto funkcia vezme dva parametre a sčíta ich.
Ak programujete v iných imperatívnych jazykoch (napr. C/C++, Java, Pascal, atď.), možno ste si všimli, že v porovnaní s inými programovacími jazykmi pri definovaní funkcie chýbajú niektoré položky.
-
Po prvé, parametre nemajú žiadne „typy“ (t. j. nedeklarujeme ich ako reťazce alebo čísla a pod.). Scheme je beztypový jazyk. Je to veľmi praktické a umožňuje to rýchlejšie písanie skriptov.
-
Po druhé, všimnite si, že tu sa nemusíme starať o vrátenie výsledku funkcie pomocou „„return“. Pri zavolaní funkcie je „vrátenou“ hodnotou posledný výrok. Napíšte túto funkciu do konzoly a skúste niečo takéto:
(AddXY (AddXY 5 6) 4)