Uvod Flashcards
Koje su karakteristike funkcionalnog programiranja
Funkcije viseg reda, Imutabilnost, Cista funkcija, lenjost, stroga tipiziranost
Sta je repna rekurzija
rekurzija gde se rekurzivni poziv izvrsava na kraju
Sta su foldable funkcije
Sve funkcije koje su tipa liste,
Neke osnovne funkcije
1. ($): Odredjuje grupisanje nase funkcije. U haskellu je uzimanje operatora levo asocijativno i ovako izgleda koriscenje: f g x = > (f g ) x, f $ g x <=> f ( g x)
- (.) : Kompozicija funkcija: f ( g x) <=> f.g x
- (:) : Desno asocijativna operacija koja dodeljuje element na pocetak liste
- (++): Operator konstrukcije liste niski
pr. (:) [] [1,2,3] ==> [ 1,2,3] []
Korisnicke liste
Kako bismo definisali novi tip moramo napraviti objekat:
data iList = Empty | Cons Int iList deriving Show
Univerzalna lista:
data uList a = Empty | Cons a (uList a) deriving Show
Da li je lista imutabilna
Jeste, Kada imamo neku listu xs, i zelimo da napravimo listu ys na sledeci nacin ys = y : xs. Operator ce samo da uzme referencu na nisku xs i da joj prilepi y ne vrsi se kopiranje zbog toga je vreme dodavanja O(1) kao i vreme brisanja glave.
(NAPOMENA) Kada bismo uradili operaciju konkatacije xs ++ [y], vremenska i memorijska slozenost bi bile O(n), bas zbog imutabilnosti
Sta je persistant vector?
To je zapravo B stablo : Slozenost: ako su cvorovi dimenzije 2 onda je slozenost O(log2(n)). Ako fiksiramo duzinu stabla na 7-10 onda je slozenost zapravo konstanta O(1)
Sta je referencionalna transparetnost?
Cistoca u realnom svetu ne postoji, na cistocu ne gledamo ovo : CPU registre,raw RAM, zagrevanje racunara.
Gde ne mogu da se nadju ciste funkcije?
Ciste funkcije jedino ne mogu da se nadju prilikom paralelizacije sa deljenjem podataka gde se podaci menjaju.