p4 Flashcards

1
Q

Šta je popratni efekt?

A

Popratni efekt je sve što funkcija proizvede, a nije povratna vrijednost. Na primjer, iznimka, alokacija na heapu itd.

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

Kakva je tu čista funkcija?

A

Funkcija koja ne radi ništa drugo osim što proizvodi povratnu vrijednost nazivamo čistom funkcijom.

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

Kakva je parcijalna funkcija?

A

Parcijalna funkcija je funkcija koja za određene inpute ne može da proizvede output. To nema veze sa čistoćom funkcije. Funkcija može biti čista i parcijalna u isto vrijeme.

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

Kako se apliciraju sve funkcije?

A

Sve funkcije se apliciraju isključivo na jednu vrijednost odgovarajućeg tipa T1 i vraćaju tačno jednu vrijednost odgovarajućeg tipa T2.

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

Ukoliko funkcija u F# programskom jeziku postoji isključivo zbog popratnih efekata, kako će to prikazivati?

A

Da je funkcija napravljena isključivo zbog popratnih efekata može se primijetiti na osnovu tipa Unit, koji se koristi na mjestu tipa za parametar ili na mjestu povratnog tipa.

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

Kada se uzima unit, a kada vraća unit?

A

Ukoliko funkcija uzima unit, a vraća nešto drugo, ta funkcija će proizvesti vrijednost striktno na osnovu popratnih efekata i nju vraćati. Međutim, ukoliko ta funkcija vraća unit, ona samo proizvodi popratni efekt od vrijednosti koja je ulaz u tu funkciju.

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

Zašto se koristi tip unit za naznačavanje popratnih efekata u funkcijama u F# programskom jeziku?

A

Tip unit se koristi zato što ne postoji funkcija u F# koja ne vraća ništa. U F# programskom jeziku svaka funkcija mora nešto da vrati, stoga funkcije koje rade popratne efekte ili vraćaju ili uzimaju unit.

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

Da li funkcije koje rade popratne efekte moraju da uzimaju ili vraćaju unit?

A

Ne. Funkcije u F# programskom jeziku mogu praviti popratne efekte čak i ako ne uzimaju ili ne vraćaju unit.

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

Da li je moguće imati simbol koji sadrži prazno mjesto u F#?

A

Da. Tu se postiže backtickom.

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

Koja je funkcija u F# koja generiše nasumične cijele brojeve?

A

Random().Next(broj).

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

Šta je funkcija višeg reda?

A

Funkcija višeg reda pri aplikaciji prihvata ili vraća vrijednosti koje su također funkcije. Dosta je da to bude ili prihvata funkciju ili vraća funkciju, ne mora biti oba istovremeno.

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

Koju asociaciju ima operator strelica, a koju asociaciju i prioritet ima aplikacija?

A

Operator strelica je desnoasocijativan, a aplikacija je lijevoasocijativna i ima najviši prioritet.

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

Šta je closure?

A

Closure je funkcija koja tokom aplikacije koristi simbol koji se zavezao za vrijednost ne tokom aplikacije, već tokom definicije funkcije.

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

Šta je Currying?

A

Currying je tehnika kojom se po definiciji funkcija koja izgleda kao da uzima više parametara transformiše u sekvencu funkcija višeg reda, koje uzimaju i vraćaju po jednu vrijednost.

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

Da li Currying omogućava samo jedan poziv funkcije umjesto više njih?

A

Koliko aplikacija u pitanju, toliko je i poziva u pitanju. Tako da se vrši veći broj poziva bez obzira na carried funkciju. Vrši se onoliko poziva koliko je aplikacija.

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

Na što se odnosi parcijalna aplikacija?

A

Parcijalna aplikacija ne može da se odnosi na običnu funkciju u F# jeziku, zato što su obične funkcije funkcije koje uzimaju i vraćaju po jednu vrijednost isključivo. Tako da se parcijalna funkcija može odnositi samo na carried funkciju, koja se čini kao da uzima više parametara.

17
Q

Kada za funkciju kažemo da je parcijalno aplicirana i šta to povlači?

A

Za kari funkciju kažemo da je parcijalno aplicirana ako se pri njenoj aplikaciji prezentira manje argumenata od broja parametara pri njenoj definiciji. Rezultat parcijalne aplikacije će biti funkcija sa manjim brojem parametara

18
Q

Da li se u F# programskom jeziku mogu definirati operatori i kako?

A

U F# jeziku je moguće definirati operatore koji nisu definirani u jeziku. Pri čemu, prioritet i asocijativnost tog operatora ne mogu se ekskluzivno definirati, ali se može uticati na istu

19
Q

Šta je operator u F# programskom jeziku?

A

Operator u F# programskom jeziku je funkcija čije je ime simboli. Pri čemu simboli mogu biti jedan ili više, a mogu biti jedni sa liste simbola dozvoljenih za definiciju operatora, koji se mogu ponavljati jednom ili više puta (!%&*+-./<=>@^|~).

20
Q

Kakvi se operatori mogu definirati u F# programskom jeziku?

A

Moguće je definirati unarni operator i binarni operator, pri čemu ne postoji infrastruktura za pravljenje ternarnih operatora. Unarni operator se definiše kao funkcija koja uzima jedan parametar i vraća vrijednost, dok binarni operator uzima dva parametra, a to se postiže korišćenjem carried funkcije

21
Q

Kako je moguće aplicirati operatore u F# programskom jeziku?

A

Operatore je moguće aplicirati u prefix i infix formi.

22
Q

Ukoliko je u pitanju prefiks forma aplikacije operatora, što tu podrazumijeva?

A

Navede se ime funkcije, odnosno operator, obavezno u zagradama, nakon čega se navodi jedna vrijednost za unarne ili dvije vrijednosti za binarne operatore.

23
Q

Ukoliko je u pitanju infix forma aplikacije operatora, šta to podrazumijeva?

A

Infix forma podrazumijeva operator bez zagrada koji se nalazi ispred argumenta ako je u pitanju unarni operator i između dva argumenta ukoliko je u pitanju binarni operator.

24
Q

Kako se utiče na asocijativnost i prioritet definiranog operatora, obzirom da se to ne može eksplicitno namjestiti?

A

Sekvenca simbola ima uticaja na prioritet i asocijativnost operatora. Oni će biti isti kao prioritet i asocijativnost kod prvog već definisanog simbola, odnosno operatora u sekvenci.

25
Q

Šta je specifično za definiciju unarnog operatora?

A

Kod unarnih operatora na mjestu prvog simbola ne može biti bilo šta. Na mjestu prvog simbola mora biti !, odnosno uzvičnik, da bi se radilo o unarnom operatoru, pa tako na primjer @ ne može.

26
Q

Da li se operatori mogu parcijalno aplicirati?

A

Da, operatori se mogu parcijalno aplicirati kao i sve druge funkcije, pri čemu se vraća lambda.

27
Q

Šta je i kakav je operator Forward Pipe?

A

Forward Pipe je operator koji ima najniži prioritet i predstavlja operator koji nešto što je s lijeve strane proslijedi desnoj strani, odnosno stvara pipeline efekt. On daje aplikaciju koja se čini u suprotnom smjeru. Forward Pipe uzima operand s lijeve strane i funkciju s desne strane, a vraća rezultat aplikacije funkcije na operand.

28
Q

Šta je i kakav je operator Backward Pipe?

A

Backward Pipe uzima funkciju s lijeve strane i operand s desne strane. Ovaj operator je lijevo asocijativan, pa je potrebno koristiti zagrade kako bi se naglasio redoslijed izvršavanja.

29
Q

Kakav je operator za kompoziciju funkcija i što vraća?

A

Operator za kompoziciju funkcija je&raquo_space; i uzima dva argumenta koja su obe funkcije. On aplicira funkciju s lijeva na operand, zatim funkciju s desna na rezultat prethodne aplikacije.