Haskell vs. Racket, statická vs. dynamická kontrola, eval Flashcards
(eq? v1 v2) vracia #t ak
v1 a v2 odkazujú na ten istý objekt,
inak vracia #f.
(eq? “Ahoj” “Ahoj”) #t
(eq? “ab” (string-append “a” “b”)) #f
(eq? (cons 1 2) (cons 1 2)) #f
(equal? v1 v2) pre typy ako reťazce, páry, meniteľné páry, a iné porovnáva …
podľa obsahu. Pre páry je rovnosť rekurzívna.
(equal? “Ahoj” “Ahoj”) #t
(equal? “ab” (string-append “a” “b”)) #t
(equal? 2 2.0) #f
(= v1 v2) vracia #t práve vtedy ak
v1 =v2. Akv1 av2 niesú
čísla, vráti chybu
Co je to symbol?
atomická hodnota, ktorá sa vypisuje ako identifikátor so symbolom ’ na začiatku.
Ako vieme zistit ci je nieco symbol?
(symbol? ’a) #t
Co robi string->symbol?
konvertuje reťazec s na symbol ’s.
Ake zlozite je porvnanie symbolov podla eq? a equal?
O(1)
Co robi eval?
umožňuje vytvoriť za behu nové dáta a potom tieto dáta zmeniť na program a vykonať ho
(eval ’(print “Ahoj”))
Co je to quote?
(quote v) je to isté ako ’v
quote zabráni interpretácii symbolov ako identifikátorov a zoznamov ako volaní funkcií
* (quote apple) ’apple
* (quote (1 2 . (3))) (1 2 3)
* (quote 42) 42
Co je to quasiquote a unquote?
(quasiquote v) je to isté ako ‘v
(unquote v) je to isté ako ,v
quasiquote pracuje podobne ako quote, ale pokiaľ narazí na (unquote v), tak vyhodnotí v a nahradí ním (unquote v).
Co vyuzivame v JS? podobne ako quasiquote?
string interpolation
* var n = 42;
* “foo${n}bar” “foo${n}bar”
* ‘foo${n}bar‘ “foo42bar”
Haskell vs Racket
Haskell je akoby podmnožina Racketu. Existujú programy, ktoré Haskell neskompiluje ale Racket áno, ale obsahujú chyby
V haskelli nepotrebujeme funkcie ako number?
v rackete vieme vracať rôzne typy
Aký je Racket z pohľadu Haskell programátora?
Racket akoby mal jeden veľký dátový typ RT. Všetky hodnoty sú práve tohto typu RT:
Co je to staticka kontrola?
akákoľvek činnosť, ktorej úlohou je zamietnuť zlý program po tom, ako sa úspešne sparsoval (vytvoril sa AST), ale ešte pred tým, než sa spustí.
AKé sú nástroje pre dodatočnú statickú kontrolu?
napr. lint
Čo kontroluje statická typová kontrola?
- nájsť chyby ako nesprávne typy argumentov 4/”2”, f v, a f nie je funkcia, if za ktorým nie je bool. výraz, . . .
- vynútenie abstrakcie
- vyhnúť sa kontrole za behu
Ako mozu dynamicky typované jazyky môžu robiť určité stat. kontroly?
použitie nedefinovanej premennej