GADT, moduly, ADT, typy ranku-n ... Flashcards

(41 cards)

1
Q

čo to sú fantómové typy?

A

znemožnia vytvorenie sémanticky nekorektných výrazov
slide 4

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

Aký je problém pri fantómových typoch?

A

Nevieme definovať múdru verziu Lt, ani eval, (slide 5)

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

Co to su GADTs?

A

Generalized algebraic datatypes
umožňujú obmedziť návratovú hodnotu dátového konštruktora
pri ADT by musel byť Expr a
pri GADT môže byť napr. Expr Int alebo Expr Bool
slide 6

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

Ako spravit eval cez GADTs?

A

slide 8

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

Co je to modul?

A

modul je zoskupenie vzájomne súvisiacich funkcií, typov, typových tried, konštánt, . . .
program je zoskupenie modulov
moduly importujú iné moduly a volajú ich funkcie
program sa spúšťa zavolaním hlavnej (main) funkcie z Main modulu

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

Ake su vyhody rozdelenia programu do modulov?

A

kontrola menného priestoru (menej kolízií mien)
slabo previazané moduly (loosely coupled) - väčšia znovupoužiteľnosť, ľahšie rozdelenie práce, rýchlejší vývoj

ukrytie implementačných detailov
umožňuje vytváranie abstraktných dátových typov

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

Aka je syntax modulov?

A

názvy modulov sú alfanumerické, začínajú veľkým písmenom
modul s názvom Meno je v súbore s názvom Meno.hs
pokiaľ je názvom modulu zložených z viac názvov oddelených
bodkou, tak názvy pred bodkou sú adresáre

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

Co exportujeme akym nazvoslovim?

A

module Meno ({-exportované názvy-}) where
module Meno where exportuje všetky názvy

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

pokial subor nezacina module tak sa predpoklada

A

module Main(main) where

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

Opis exporty a importy na slide 11, 12

A

slide 11,12

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

Naco nam je import qualified?

A

zabraňuje kolízii názvov (name clash)

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

Co je to abstraktny datovy typ?

A

dátový typ spolu s operáciami nad týmto typom, pričom sa ukrývaju implementačné detaily (vrátane štruktúry typu)
dostupné operácie nazývame rozhranie (interface) ADT
napr. Data.Map a Data.Set

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

Opis ADT zasobnika

A

slide 14

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

Co znamena ze normalne typy su v haskell ranku-1?

A

a → b → a je ekvival.:
forall a. (a -> forall b. (b -> a))
forall a b. a -> b -> a

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

Aky je problem s f::a->(a,Int), fx=(x,1)?

A

Očakávali by sme, že funkcia g f x y = (f x, f y) po zavolaní g2 f True ’a’ vráti ((True,1),(’a’,1)). V skutočnosti však funkcii g Haskell odvodil typ:
g::(a->b)->a->a->(b,b)
Potrebujeme typ ranku-2

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

Ako s typmi ranku 2? Aky typ chceme?

A

slide 17

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

co je zakladom pre typy vyssieho ranku?

A

System F (alebo druho-rádový λ-kalkulus)

18
Q

Co je to typ ranku n?

A

typ ranku-n je funkcia, ktorá má aspoň jeden argument ranku-(n-1), ale žiadny argument vyššieho ranku

19
Q

Ako v HS zapisat funkciu ranku n?

20
Q

opis co sa deje na slide 19

21
Q

Co je to bezbodovy styl?

A

Bezbodový štýl, je štýl zápisu funkcie, pri ktorom sa v tele funkcie nespomínajú argumenty (body) v ktorých sa funkcia vyhodnocuje.

22
Q

Daj priklady na pointfree upravy

23
Q

co sa deje na slide 23?

A

pointfree prepis
slide 23 pozri

24
Q

Kedy je vyraz v WHNF? (Weak head normal form)

A

výraz je vo WHNF, ak jeho najvonkajšejšia časť je:
* konštruktor (True, Just (1+2), (:) (1+2) rest)
* lambda abstrakcia (\x -> výraz)
* neúplná aplikácia vstavanej funkcie ((+) 2, sqrt)

25
Pozri si priklady na vyrazy v WHNF a nie v nej
slide 24
26
Kedy je vyraz v NF? (Normal form)
výraz je v normálnej forme (NF), keď je plne vyhodnotený (žiadny podvýraz už nemôže byť ďalej vyhodnotený)
27
Daj priklady vyrazov v NF a nie v nej
slide 25
28
Aky je vztah NF a WHNF?
výraz je NF ⇒ výraz je vo WHNF
29
Co robi seq?
najzákladnejší spôsob ako zaviesť striktnosť do Haskellu funkcia seq :: a -> b -> b * berie dva argumenty ľubovoľného typu * vracia hodnotu druhého argumentu * ako vedľajší efekt vyhodnotí prvý argument do WHNF
30
Preco foldl' nemusi vzdy fungovat?
slide 27
31
Co to je bang pattern?
* f1 !x = True – vyhodnotí x do WHNF * f2 (!x, y) = [x,y] – vyhodnotí x, ale nie y * f3 !(x,y) = [x,y] = f4 (x,y) = [x,y] * let !z = x–vyhodnotíxdoWHNF
32
na co je deepseq?
poskytuje funkcie pre úplné vyhodnotenie dátových štruktúr (NF)
33
Daj priklad na deepseq
slide 29
34
Co to su immutable datove struktury?
po vytvorení už nemôžu byť modifikované môžeme vytvoriť novú štruktúru vychádzajúcu zo starej, ale starú nemôžeme modifikovať (update in-place)
35
Ake su vyhody immutable struktur?
ľahšie sa o nich uvažuje - majú iba jeden stav a v tom ostávajú viac-vláknová bezpečnosť (thread safety), je read-only ľahko sa dajú zdieľať zabraňujú vedľajším efektom stará a nová verzia zdieľajú spoločné časti ľahko sa zisťuje ktorá časť bola v novej verzii modifikovaná (oproti starej verzii)
36
daj priklady na immutable v Java, C#, ...
slide 31
37
Mame aj v haskelli mutable struktury?
Ano import Data.STRef (newSTRef, modifySTRef’, readSTRef)
38
Co je to lexikalny scoping?
funkcia môže používať iba lexikálne viditeľné premenné v čase definície bez closures – ak by tieto premenné mohli medzi definíciou a volaním zaniknúť, je to chyba s closures – použité premenné ∃ v čase definície existujú v uzávere funkcie aj ak by medzitým mali zaniknúť
39
Co je to dynamicky scoping?
(nepoužíva closures) – premenné sa vždy berú z aktuálneho prostredia (môže obsahovať premenné, ktoré nie sú lexikálne dostupné v čase definície)
40
Ake jazyky pouzivaju closures?
Napr javascript
41
Kde mame typovu inferenciu?
C++ auto C# var Java Arrays.asList