Racket, lenivé vyhodnocovanie, makrá Flashcards
Opis racket ako jazyk
funkcionálny jazyk, vychádzajúci z jazyka Scheme
lambdafunkcie,uzávery,…
ale má aj imperatívne vlastnosti
* meniteľné premenné
* funkcie s vedľajšími efektami
Aky dynamicky typovy system pouziva?
dynamický
* počas kompilácie sa nerobí statická typová kontrola
* kompilátor akceptuje viac programov, ale chyba nastane pri behu
Ake vyhodnocovanie argumentov ma racket?
striktné
Cim musi zacinat racket program?
lang racket ;aby sa zvolil správny jazyk
Z coho pozostava racket program?
z termov.
Term je:
* atóm – napríklad #t, #f, 1, 2.0, null, “hello”, x, . . .
* špeciálna forma – napríklad define, lambda, if (podla makier)
* postupnosť – niekoľko termov oddelených medzerou vzátvorkách (t1 t2 … tn)
Co je (t1 t2 … tn)?
- ak t1 je špeciálna forma, tak sémantika postupnosti je špeciálna
- inak ide o volanie funkcie t1 s argumentami t2, . . . , tn
Ako definujeme premenne?
(define x 42) – priradí 42 do premennej x
(define x (+ (* 4 10) 2)) – volanie funkcie, vždy v prefixovom plne uzátvorkovanom tvare (f a1 a2 . . . an)
Ako vieme definovat funkciu?
(define cube (lambda (x) (* x x x)))
(define (cube x) (* x x x)) – syntaktický cukor
Kolko argumentove funkcie ma racket?
viac, nie je ako haskell
ale aj s premenlivym poctom
Aké výhody prináša totálne zátvorkovanie?
konverzia zdrojového kódu do abstraktného syntaktického stromu je triviálna (parsovanie)
netreba riešiť prioritu operátorov
rozdelenie do riadkov a odsadenie je voliteľné a ľahko
automatizovateľné
Aky je problem so zatvorkami?
(* (+ 1 2) (- 3 1)) 6
(* ((+ 1 2)) (- 3 1)) application: not a procedure
(* ((+) 1 2) (- 3 1)) application: not a procedure
bez statickej typovej kontroly sa chýbajúce/nadbytočné zátvorky prejavia až za behu
Aku syntax ma if?
(if podmienka true-výraz false-výraz)
Aku syntax ma cond?
slide 10
Co ak nezakoncime cond else alebo #t?
v tom prípade ale môže cond vrátiť #<void>
prítomnosť #<void> sa dá testovať pomocou void?</void></void>
Porovnaj zoznamy v haskelli a v rackete
slide 12
Co pouzivame na head/tail? Preco take nazvy?
car – “Contents of the Address part of Register”
cdr – “Cont. of the Decrement part of Reg.” (čítaj “could-er”)
co je zoznam vlastne?
iba vlastne špeciálny prípad vnorených dvojíc konciacich null