Pokud tady nekterá chybí, přidejte ji. Zde je pak seznam definic a významů cizích slov a dalších pojmů.
Příkazu v prvním sloupci je ve druhém uveden zápis (název argumentů odpovídají těm v popisu), ve třetím popis argumentů (viz dál) a návratové hodnoty, ve čtvrtém slovní popis a ve čtvrtém - je-li uveden - odkaz na skripta (Paradigmata Programování 1A, B, Vychodil, Konečný).
Pokud je ve třetím sloucpi číslo n s plusem, znamená, že funkce bere n a více argumentů. Pokud je tam n tečka (nebo n.m) bere funkce právě n, nebo n až m argumentů. Pokud je tam cokoliv jiného, je to hodnota, kterou funkce vrací bez jakýchkoliv argumentů (to je dobré znát na všechny testy ;-).
Zeleně jsou (primitvní) procedury, červeně specální formy.
MATEMATICKÉ PROCEDURY | ||||
+ | (+ a1 [... an]) | 0 | Sečte argumenty. | |
- | (- a1 [... an]) | 1+ | Od prvního argumentu odečete ostatní (a1-a2-a3...an=a1-(a2+a3...an) | |
* | (* a1 [... an]) | 1 | Vynásobí argumenty. | |
/ | (/ a1 [... an]) | 1+ | Vydělí prní argument zbývajícími (..(a1/a2)/a3..)/an=a1/(a2*a3*...an). Pozor na dělení nulou! | |
sin, cos, tan, abs, log, exp, sqr, sqrt, | (fce arg) | 1. | Provede požadovanou funkci se zadaným argumentem. | |
quotient, modulo | (fce a1 a2) | 2. | Celočíselné dělení a zbytek po celočísleném dělení a1 a2-kou. Je-li a2 rovno 0, končí chybou. | |
PODMÍNKY A LOGIKA | ||||
if | (if podm pr1 [alt]) | 2.3 | Vyhodnotí se na hodnotu pr1, pokud je podm vyhodnocena na #t, jinak na alt (pokud chybí, tak na udefined). | |
cond | (cond (podm1 pr1) ... (podmn prn) [else alt]) |
1. | Vyhodnocuje postupně podm1, podm2, a při prvním vyhodnocení podmi na #t vrátí vyhodnocení pri. Pokud jsou všechny podmi #f, vyhodnotí alt. | |
or | (or a1 [... an]) | #f | Vrátí první hodnotu o pravdivostní hodnotě #t (cokoliv kromě #f), nebo #f, pokud tam není. | |
and | (and a1 [... an]) | #t | Vrátí první hodnotu o pravdivostní hodnotě #f, nebo #t, pokud tam není. | |
not | (not arg) | 1. | vrátí log. negaci argumentu. | |
even? | (even? arg) | 1. | Vrátí #t, je-li arg sudý, #f jinak. | |
boolean?, list?, null?, number?, pair?, procedure?, symbol? | (proc arg) | 1. | Vrátí #t, je-li arg log. hodnota/ seznam/ prázdný seznam/ číslo/ pár/ procedura/ symbol, #f jinak. Pozor, nezapomeňte, že symbol je jenom to, co není vyhodnoceno (tedy bylo někdy (kvazi)kvotováno) a že i prázdný seznam je seznam: (list? ()) => #t . |
5.4 126 |
equal? | (equal? a1 a2) | 2. | Vrátí #t, jsou-li a1 a a2 totžné (shodná hodnota, datový typ i reprezentace: (equal? 2.0 2) => #f ), #f jinak. |
|
<, <=, >, >=, = | (proc a1 a2 [... an]) | 2+ | Vrátí #t, platí li mezi všemi argumenty proc. | |
PROSTŘEDÍ A VAZBY | ||||
define | (define s h) | 2. | V aktuálním prostředí naváže h na s. | |
lambda | (lambda ([a1 ... an]) telo1 [...telon]) |
2. | Vyhodnotí na uživatelskou proceduru: proc:<argumenty;telo;prostředí vzniku>, tedy proc:<[a1...an];telo1[... telon];PX> . Nevyhodnocuje její tělo! |
|
let | (let ([(s1 h1) ... (sn hn)]) telo1 [... telon]) |
2+ | V prostředí vzniku vyhodnotí h1...hn a naváže je v novém prostředí na s1...sn a provede telo1...telon. | |
let* | (let* ([(s1 h1) ... (sn hn)]) telo1 [... telon]) |
2+ | V prostředí vzniku vyhodnotí h1, naváže jej v novém prostředí na s1 a v tomto prostředí vyhodnotí h2, a v nově vzniklém naváže na s2 ... a provede telo1...telon. | |
pojmenovaný let | (let jmeno ([(s1 h1) ... (sn hn)]) telo1 [... telon]) |
3+ | Vytvoří nové prázdné prostředí, ve kterém naváže jmeno na proceduru s argumenty s1...h1 a telem telo1...telon, kterou pak následně zavolá s h1...hn. Pro lamy: je to let, který má v prostředí předka (jen) vazbu na sebe sama nazvanou jmeno. | 8.4 204 |
letrec | (letrec ([(s1 h1) ... (sn hn)]) telo1 [... telon]) |
2+ | V Aktuálnín prostředí vyhodnotí h1...hn a naváže je v tomtéž prostředí na s1...sn a provede telo1...telon. | 9.3 246 |
PÁRY A KVOTOVÁNÍ | ||||
cons | (cons h1 h2) | 2. | Vytvoří (zkonstruuje-construct) pár ( 1 . 2 ). | |
car cdr | (car p) (cdr p) |
1. | Vrátí první/druhý prvek páru. | |
cadr a podob. | (cadr p) | 1. | Bere od začátku (nejdřív a, pak b), a expanduje na vnořené c*r: (cadr '(1 . (2 . 3)))= (car (cdr '(1 . (2 . 3)))) => 2 , ale člověk vyhodnocuje 'naopak' (od zadu) (vemu cdr '(1 . (2 . 3))) => (2 . 3) a na něj aplikuju car: (car '(2 . 3) =>2) . |
|
quote ' | (quote sym) 'sym |
1. | Vyhodnotí se na 'symbol' sym v nevyhodnoceném tvaru. Pro lamy: Vezme sym, neudělá s ním nic a vrátí ho. | |
quasiquote ` unquote , unquote-splicing ,@ | (quasiquote ((unquote s1) (unquote-splicing s2))) `(,s1 ,@s2) |
!1. | Kvazikvotování. Bez použití unqoute a unqoute-splicing sechová jako normální kvotvání. Je-li v kvazikvotovaném seznamu (jinde jinde to fungovat nebude) (unquote s1), nebo ,s1, vyhodnotí se jen s1. Je-li tam (unquote-splicing s2) nebo ,@s2, pak se s2 vyhodnotí a vzniklý seznam (musí to být seznam, jinak končí chybou) se zanoří do seznamu, ve kterém byl 'volán'.`(1 2 ,(+ 10 20) ,@(list 10 11 12) 101 102) => (1 2 30 10 11 12 101 102) |
11.1 270 |
SEZNAMY A PRÁCE S NIMI | ||||
list | (list [a1 ... an]) | () | Ze zadaných argumentů vytvoří seznam (předtím je samozřejmě všechny vyhodnotí). Pro lamy: vyhodnotí všechny argumenty a obalí je závorkou. Nejjednoduší implementace: (define list (lambda x x)) |
|
build-list | (build-list c proc) | 2. | "Postaví seznam" tak, že aplikuje proceduru (1 proměnné) proc na čísla od 0 do c. Tím vznikne seznam o c prvcích. | |
length | (lenth l) | 1. | Vrátí délku, tzn. počet prvků v seznamu l. I když je prvkem seznamu seznam, pořád jej považuje za 1 prvek. | |
list-ref | (list-ref l n) | 2. | Vrátí n-tý prvek v seznamu l. Samozřejmě počítáno od nuly. Je-li n větší nebo rovno délce seznamu, vrátí chybu. | |
reverse | (reverse l) | 1 | Přeskupí pořadí prvků v seznamu (opět ne hloubkově). | |
append | (append [s1...sn]) | () | Spojí seznamy s1 ... sn za sebe. Resp. nakopíruje za sebe. | |
map | (map proc l) | 2. | Namapuje, tedy aplikuje proceduru na každý prvek seznamu. Výsledkem je seznam, s pozměněnými hodnotami. | |
filter | (filter f l) | 2. | Vrátí seznam bez prvků, odpovídajích predikátu f. Pro lamy: Vyháže ze seznamu, všechno, co splňuje f. | |
apply | (apply [a1 ... an] proc l) | 2+ | Aplikuje proceduru s parametry, kterými jsou argumenty a1 a poté všechny prvky seznamu. Tedy (apply + 1 2 '(30 40 50)) = (+ 1 2 30 40 50) = 123 . Pro lamy: Seznamu odebere vnější závorky a provede výpočet. |
|
foldl, foldr | (foldr proc term l) | 3. | Foldr postupně aplikuje dvouargumentovou funkci proc na dvojce: apply(proc;poslední prvek seznamu,terminátor), čímž se výsledek tohohle vyhodnocení stává opět terminátorem a v další aplikaci se použije: apply(proc;předposlední prvek seznamu,terminátor), ... až apply(proc;první prvek seznamu,terminátor), což je výsledek. Foldl funguje stejně, akorát seznam prochází od prvního k poslednímu, tedy zlleva (začne s apply(proc;první prvek seznamu,terminátor) a končí na apply(proc;poslední prvek seznamu,terminátor). Pro prázdný seznam vrací oba jen terminátor. Terminátorem může být třeba pár (nebo i seznam), a tak se takto můžou předávat 2 a více hodnot součastně (což se někdy hodí). |
|
OSTATNÍ | ||||
eval | (eval elem [env]) | 1+ | Vyhodnotí argument elem v prostředí env. Velmi mocný nástroj. |
Nejdřív se podívejte, jestli už není v seznamu přidaných níže. Bylo by vhodné za název procedury přidat i číslo stránky, nebo označení kapitoly ve skriptech, kde se o oní něco píše.
Přidané procedury:
string? gcd odd? first, second, third.... m@rtlin odd? memq memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv memv dělitelnost