* First class citizens 1. Za objekat u nekom programskom jeziku kazemo da je gradjanin prvog reda ako: 2. Navesti primer necega sto jeste gradjanin prvog reda u programskom jeziku C 3. Navesti primer necega sto nije gradjanin prvog reda u programskom jeziku C * Vrednosti izraza: 1. U imperativnim programskim jezicima vrednost izraza nakon poziva funkcije f() vise puta daje: uvek iste vrednosti mogu se promeniti vrednosti Obrazlozenje 2. Analogno za funkcionalne jezike pitanje * Izbor efikasnog jezika: 1. Natalija zna da programira u Pajtonu i Haskelu. Dobila je zadatak da isprogramira program koji ce biti efikasan u fazi izvrsavanja. Koji od ova dva jezika ce odabrati? Obrazloziti. * Tipovi u Haskellu: 1. Ukoliko neka funkcija f u Haskellu ima tip Eq a => [a] -> a, to znaci sledece: 2. Ukoliko neka funkcija f u Haskellu ima tip Num a => [a] -> [a], to znaci sledece: 3. Funkcija u Haskellu treba da primi argumente broj i listu i kao rezultat treba da vrati listu ciji su svi elementi uvecani za dati broj. Koji je najopstiji tip koji ta funkcija moze da ima? * Funkcije viseg reda - Lambda izrazi se traze u svim primerima ispod 1. Navesti primer funkcije viseg reda koja kao argument prima funkciju(a da je primer drugaciji od primera sa predavanja) 2. Navesti primer funkcije viseg reda koja kao povratnu vrednost ima funkciju(a da je primer drugaciji od primera sa predavanja) 3. Navesti primer funkcije viseg reda koja ima i kao argument i kao povratnu vrednost funkciju 4. Navesti primer funkcije viseg reda koja ima dva argumenta koja su funkcije * Normalna forma Ispisati izvodjenje normalne forme ako postoji, a ako ne, obrazloziti zasto ne postoji 1. (La.a*a+1)((Lb.b+1)2) 2. (La.a (a 10))(Lb.b-2) 3. ((Lkmn.k*m+n)2)3 4. (Lx.10)((Lx.x x)(Lx.x x)) 5. (Lx.x x x)(Lx.x x) * Konkurentno programiranje, uvod 1. Konkurentnu paradigmu karakterise: a) vise procesa koji se izvrsavaju u istom vremenskom trenutku, a koji imaju zajednicki cilj b) vise procesa koji se izvrsavaju u istom vremenskom periodu, a koji imaju zajednicki cilj 2. Objasniti razliku izmedju prethodne dve tvrdnje kao i razlog zasto bas ta odabrana tvrdnja definise konkurentno programiranje 3. Navesti dva primera konkretnih aplikacija(koja nisu navedena na slajdovima) za koje je konkurentno resenje prirodan izbor 4. Navesti primere sistema kod kojih se prirodno koristi distribuirano programiranje 5. Slanje poruka moguce je kod: a) Konkurentnog programiranja b) Paralelnog programiranja u uzem smislu c) Distribuiranog programiranja 6. Koriscenje zajednicke memorije moguce je kod: a) Konkurentnog programiranja b) Paralelnog programiranja u uzem smislu c) Distribuiranog programiranja * Nivoi konkurentnosti 1. Koji nivoi konkurentnosti postoje? 2. Zasto nivo instrukcija ne utice na dizajn programskog jezika? 3. Ako imate sekvencijalnu i paralelnu implementaciju resenja jednog problema, kako cete utvrditi faktor ubrzanja paralelizacijom? 4. Na koji nacin arhitektura hardvera utice na programersko resenje? * Zadaci, niti,... 1. Na koji nacin se zadatak razlikuje od potprograma? 2. Koja je osnovna razlika izmedju lakih i teskih zadataka? 3. Koliko se cesto vrsi promena konteksta i na koji nacin to utice na efikasnost resenja? * Konkurentno i distribuirano 1. Sta je sinhronizacija? 2. Problemi koji nastaju ukoliko nema sinhronizacije? 3. Problemi koji nastaju ukoliko je sinhronizacija pogresna? 4. Zasto je tesko pronaci gresku u konkurentnim programima? 5. Prednosti distribuiranih sistema? 6. Vertikalno skaliranje? 7. Horizontalno skaliranje? 8. Zasto su distribuirani sistemi pouzdaniji od nedistribuiranih? 9. Osnovni zahtevi za nedistribuirane baze podataka? 10. Osnovni zahtevi za distribuirane baze podataka? 11. Zasto postoji sloj koji je odgovoran za slanje i primanje poruka? 12. Koje vrste sistema za distribuirano slanje poruka postoje? * Konkurentno programiranje i veza sa programskim jezicima 1. Koje su zajednicke osobine za jezike Scala, Java, Kotlin i Clojure? 2. Koje su razlike jezika Scala, Java, Kotlin i Clojure? 3. Sta povezuje jezike Erlang, Elixir i Elm? 4. Koji programski jezici su pravljeni sa ciljem olaksanja konkurentnog programiranja? * Supstitucija 1. Primenom supstitucije [x -> y] na izraz f(x, y) dobija se izraz? 2. Primenom supstitucije [x -> y, y -> a] na izraz f(x, y) dobija se izraz? 3. Primenom supstitucije [x -> g(x), y -> a] na izraz f(x, y) dobija se izraz? 4. Primenom supstitucije [x -> f(x, y), y -> a] na izraz f(x, y) dobija se izraz? 5. Primenom supstitucije [x -> f(x, y), y -> g(x)] na izraz f(x, y) dobija se izraz? 6. Primenom supstitucije [x -> f(x, y), y -> g(a)] na izraz f(f(x, y), y) dobija se izraz? 7. Primenom supstitucije [x -> y, y -> z, z -> g(x)] na izraz f(f(x, y), z) dobija se izraz? * Unifikacija Napisati da li su izrazi unifikabilni ili ne i objasniti zasto 1. g(x, y) i f(x, y) 2. f(x, a) i f(y, b) 3. f(x, g(a)) i f(y, g(z)) 4. f(x, g(x)) i f(g(y), g(g(z))) * Metod rezolucije 1. Za tekst uneti odgovarajuce oznake: Ako pada sneg, Tanja ponese jaknu. Ako ne pada sneg, Tanji nije hladno. Ako Tanja ima jaknu, onda joj nije hladno. 2. Zapisati u KNF-u: Ako pada sneg, Tanja ponese jaknu. 3. Zapisati u KNF-u: Ako ne pada sneg, Tanji nije hladno. 4. Zapisati u KNF-u: Ako Tanja ima jaknu, onda joj nije hladno. 5. Metodom rezolucije, svodjenjem na kontradikciju dokazati da Tanji nije hladno. * Hornove klauze Da li su sledece klauze Hornove (da/ne)? 1. p V q 2. p V not q 3. not p V q 4. not p V not 1 5. p V q V r 6. not p V q V r 7. p V not q V r 8. p V q V not r 9. not p V not q V r 10. not p V q V not r 11. p V not q V not r 12. not p V not q V not r * Deklarativna i proceduralna interpretacija Navesti deklarativnu interpretaciju za naredna pravila, a zatim i proceduralnu: 1. voce(X) :- biljka(X), jestivo(X), slatko(X). 2. manje(X, Y) :- beba(X), devojka(Y) * Levostrana rekurzija 1. Sta nije u redu sa narednim pravilom: panda(X) :- panda(Y), majka(Y, X). 2. Kako izgleda stablo izvodjenja za upit: ?-panda(X) [objasniti recima] 3. Koja vrsta problema nastaje ako se koristi levostrana rekurzija? [NAPOMENA] Ako neko pitanje bude na ispitu u obliku bilo kog od navedena tri, neophodno je objediniti sva tri odgovora u jedan. * Operator secenja Za upit ?-kompajler(X). koja resenja ce biti odsecena ako se u bazi znanja nalaze sledece cinjenice i pravila: kompajler(clang). alat(gcc). alat(cekic). alat(gdb). alat(icc). prevodilac(gcc). prevodilac(icc). kompajler(X) :- alat(X), !, prevodiac(X). kompajler(compcert). Obrazloziti odgovor. * Operator NOT Sta ce biti rezultat rada Prologa za upit ?-jestivo(X). ukoliko se u bazi znanja nalaze sledece cinjenice i pravila (navesti odgovor i obrazloziti): 1. cvece(ljiljan). raste_na_drvetu(breskva). biljka(breskva). biljka(ljiljan). jestivo(X) :- NOT(cvece(X)), biljka(X), raste_na_drvetu(X). 2. cvece(ljiljan). raste_na_drvetu(breskva). jestivo(X) :- biljka(X), NOT(cvece(X)), raste_na_drvetu(X). biljka(breskva). biljka(ljiljan). 3. jestivo(X) :- biljka(X), raste_na_drvetu(X), NOT(cvece(X)). cvece(ljiljan). raste_na_drvetu(breskva). biljka(breskva). biljka(ljiljan). * Skript jezici 1. Skript jezici adresiraju (oznaciti tacne odgovore) brz razvoj lako odrzavanje efikasnost izvrsavanja staticke provere dinamicke provere fleksibilnost razvoja lokalnu prilagodljivost 2. Osnovne karakteristike skript jezika su? (uz objasnjenje na ispitu) 3. Navesti osnovne domene upotrebe skript jezika (bar 3) 4. Za svaki prethodno navedeni domen upotrebe navesti bar dva skript jezika koja se koriste u tom domenu. * Jezici prosirenja 1. Cemu sluze jezici prosirenja? 2. Navesti primer jezika prosirenja i aplikacije u kojoj se taj jezik moze koristiti? 3. Koja je osnovna slicnost, a koja je osnovna razlika izmedju jezika PHP i JavaScript? 4. Koji je uticaj jezika za procesiranje teksta na moderne skript jezike? * Karakteristike nekih skript jezika 1. Koje su osnovne karakteristike jezika Python? 2. Navesti tri skript jezika opste namene? 3. Koji je odnos jezika Ruby i okruzenja Ruby on rails? 4. Koje su osnovne karakteristike jezika Lua? * Izbor odgovarajuceg jezika 1. Natalija zna da programira u Pajtonu i Haskelu. Dobila je zadatak da isprogramira program koji ce biti efikasan u fazi izvrsavanja. Koji od ova dva jezika ce odabrati? 2. Izbrani jezik je efikasniji zato sto? 3. Osnovne karakteristike ovog jezika? 4. Zaokruziti slovo ispred netacne/netacnih izjava: skript jezike karakterise skracen zapis zarad brzog razvoja i udobnijeg koriscenja u skript jezicima obicno je omogucen lak pristup funkcionalnostima OS kao sto su funkcije za ulaz/izlaz, manipulacija datotekama i direktorijumima,... vecina skript jezika dinamicki odredjuje tipove podataka i to ih cini veoma efikasnim skript jezici imaju svoje pretke u jezicima za procesiranje teksta i zato obicno imaju bogatu podrsku za rad sa stringovima * OOP i proceduralna paradigma 1. Kojoj paradigmi pripada trik programiranje? Sta su osnovne karakteristike ove vrste programiranja? 2. Koji je odnos operacione paradigme i asemblerskih jezika? 3. Koji je vremenski odnos strukturne i proceduralne paradigme(sta je pre nastalo i zasto)? 4. Napisati odgovarajuci strukturni kod: #include int main () { int a, b, n = 0; l20: scanf("%d", &a); b = -a; if (a > 0) goto l30; b = a + 10; l30: printf("b = %d\n", b); n = n + 2; if (n != 10) goto l20; } 5. Koji je minimalni skup upravljackih struktura strukturne paradigme? 6. Sta je kohezija? 7. Sta je kopcanje? 8. Kako biste okarakterisali naredni kod (po pitanju kohezije i kopcanja)? void f(int a[], int n, int *min, int *max, int *avg) { int i; *min = a[0]; *max = a[0]; *avg = a[0]; for (i = 0; i < n; ++i) { if (*min > a[i]) *min = a[i]; if (*max < a[i]) *max = a[i]; *avg += a[i]; } *avg /= n; } 9. Klasa je? 10. Objekat je? 11. Nasledjivanje je? 12. Interfejs je? 13. Implementacija je? 14. Prvi objektno-orijentisani jezik je? 15. Objektno zasnovan jezik je? * Leksika i sintaksa 1. Na koji nacin se formalno zadaje leksika programskog jezika? 2. Na koji nacin se formalno zadaje sintaksa programskog jezika? 3. Zasto se leksika i sintaksa zadaju formalno? 4. Sta su ezotericni programski jezici i koja je njihova svrha? * Semantkika 1. Sta je semantika programskog jezika? 2. Kako se semantika moze zadati? 3. Koja je uloga formalnog zadavanja semantike? 4. Sta je pragmatika programskog jezika? * Zivotni vek promenljivih 1. Da li svaka memorijska lokacija koja se koristi u programu mora da ima svoje ime? 2. Da li razlicite promenljive mogu imati istu memorijsku lokaciju? 3. Koje osnovne vrste zivotnog veka promenljivih postoje? 4. Sta su kontekstno zavisne kljucne reci? * Kontrola toka, tipovi, prevodjenje 1. Koji su osnovni mehanizmi za kontrolu toka? 2. Koji tipovi podataka su prisutni u tradicionalnim jezicima? 3. Koji tipovi podataka su prisutni u skript jezicima? 4. Koje vrste prevodjenja postoje i na koji nacin je to povezano sa karakteristikama programskog jezika?