Racket, lenivé vyhodnocovanie, makrá Flashcards

(43 cards)

1
Q

Opis racket ako jazyk

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Aky dynamicky typovy system pouziva?

A

dynamický
* počas kompilácie sa nerobí statická typová kontrola
* kompilátor akceptuje viac programov, ale chyba nastane pri behu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Ake vyhodnocovanie argumentov ma racket?

A

striktné

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Cim musi zacinat racket program?

A

lang racket ;aby sa zvolil správny jazyk

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Z coho pozostava racket program?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Co je (t1 t2 … tn)?

A
  • ak t1 je špeciálna forma, tak sémantika postupnosti je špeciálna
  • inak ide o volanie funkcie t1 s argumentami t2, . . . , tn
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Ako definujeme premenne?

A

(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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Ako vieme definovat funkciu?

A

(define cube (lambda (x) (* x x x)))
(define (cube x) (* x x x)) – syntaktický cukor

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Kolko argumentove funkcie ma racket?

A

viac, nie je ako haskell
ale aj s premenlivym poctom

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Aké výhody prináša totálne zátvorkovanie?

A

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é

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Aky je problem so zatvorkami?

A

(* (+ 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Aku syntax ma if?

A

(if podmienka true-výraz false-výraz)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Aku syntax ma cond?

A

slide 10

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Co ak nezakoncime cond else alebo #t?

A

v tom prípade ale môže cond vrátiť #<void>
prítomnosť #<void> sa dá testovať pomocou void?</void></void>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Porovnaj zoznamy v haskelli a v rackete

A

slide 12

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Co pouzivame na head/tail? Preco take nazvy?

A

car – “Contents of the Address part of Register”
cdr – “Cont. of the Decrement part of Reg.” (čítaj “could-er”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

co je zoznam vlastne?

A

iba vlastne špeciálny prípad vnorených dvojíc konciacich null

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Aka je vyhoda a nevyhoda dynamickej kontroly typov?

A

nedokáže pri kompilácii odhaliť všetky chyby
ale umožňuje vytvárať flexibilnejšie DŠ a programy
napr sum listu aj s ne-int prvkami, ktore berie default ako 0, slide 18

19
Q

Co robi let?

A

vyhodnocuje priradenia vo vonkajšom kontexte, nezahŕňajúc aktuálne definované premenné
nemôžeme sa odvolávať na neskôr definované premenné

20
Q

co robi let*?

A

pracuje rovnako ako let ale po definovaní lokálnej premennej je viditeľná aj v nasledujúcich definíciách v let*
taktiež sa nemôžeme odvolávať na neskôr definované premenné

21
Q

Co je vhodne na vymenu premennych?

A

(let ([x y] [y x]) (list x y)) lebo
(let* ([x y] [y x]) (list x y)) -> (y,y)

22
Q

Na co je letrec?

A

pracuje rovnako ako let ale môžeme sa odvolávať aj na neskoršie definované premenné (nemôžeme použiť ich obsah)
nemôžeme opakovane definovať tú istú premennú:
vôbec nie je vhodný na výmenu premenných

23
Q

Opis menitelne premenne so set!

24
Q

Co su mcons?

A

meniteľné páry
set-car! a set-cdr!
mcons, mcar, mcdr, mpair?, set-mcar! a set-mcdr!
car,… (vrátane length atď.) sa nedajú použiť na mcons-bunku

25
Ake vyhodnocovanie ma racket?
striktne
26
Kedy sa v rackete vyhodnocuju vetvy v if?
až podľa podmienky
27
Co je thunk? Naco je dobry?
funkcie nevyhodnocujú svoje telo až do zavolania (lambda () e) je thunk pre e thunk sa ako argument nevyhodnocuje, už je hodnotou
28
Zhrn thunks
slide 26 ((lambda () (+ 1 2))) sa vyhodnotí na 3 (lambda () (+ 1 2)) ale nie
29
Co robi begin?
vyhodnotí postupne všetky svoje argumenty (zľava doprava) a vráti hodnotu posledného
30
Na co je lazy eval?
Ak drahý výpočet nemá vedľajšie efekty, tak by sme chceli: * nepočítať ho pokiaľ ho nebude treba, * výsledok odložiť pre ďalšie použitia.
31
Pomocou coho vieme lazy eval implementovat v rackete?
Thunks a mcons
32
Opis lazy eval na slide 29
slide 29
33
Co to su makra?
popisuje ako transformovať novú syntax do syntaxe v pôvodnom jazyku - vlastny syntakticky cukor
34
Co je to makro system?
jazyk pre definíciu makier * môže to byť podjazyk iného väčšieho jazyka * môže byť s ním úzko prepojený (tokenizácia, scoping)
35
Co je to rozbalenie makier (macro expansion)?
prepísanie každého použitia makra do syntaxe pôvodného jazyka predtým než sa program vôbec začne kompilovať
36
daj priklady na makra
slide 31
37
Co je problem s tokenizaciou pri makrach?
tokenization – chceme, aby makrá nepracovali na znakoch ale tokenoch, aby sme sa vyhli falošnej detekcii použitia makra napríklad: nech sa makro head rozbalí na car, ale nie head-less na car-less
38
Co je problem s makrami v C++?
slide 32
39
Ako sa v C++ popasovali s problemom makier?
názvy makier sú iba z veľkých písmen, ostatné názvy (premenných, funkcií, . . . ) obsahujú aj malé písmeno
40
Definuj syntax makier v rackete
slide 34
41
Aky je problem pri definicii makier dalsi?
slide 35
42
Ako vieme vyriesit duplicitne volanie?
pomocou lokalnych premennych slide 36
43
Opis dalsie problemy s makrami v rackete
slides 36 az koniec toto si pozri...