uvodne napomenedasdasdasdas
DESCRIPTION
SchemeDr RacketTRANSCRIPT
-
1Uvodne napomene
O programskim jezicimaFunkcionalni stil programiranja
Evolucija funkcionalnih programskih jezika
Autor prezentacije: Milo Radovanovi
Sadraj O programskim jezicima Funkcionalni stil programiranja
Nepostojanje eksplicitnog zadavanja redosleda izvravanja Nepostojanje naredbi Nepostojanje sporednih efekata Funkcije kao ravnopravni objekti Ne-striktna semantika Statiko vezivanje O funkcionalnim jezicima
Evolucija funkcionalnih programskih jezika Osnove Lambda rauna LISP Iswim FP ML SASL, KRC, Miranda Haskell
-
2O programskim jezicima Proces izraunavanja je niz (skup) radnji koje
raunar treba da izvri reavajui dati zadatak Programski jezici su jedan od naina da se
raunaru saopti ta i kako da izvri Proces reavanja zadatka na raunarima:
Ralaniti sloeni zadatak na niz jednostavnijih Jednostavni zadaci = koraci u reenju koje raunar
moe neposredno da rei (izvri) Ralanjivanje vri ovek Ralanjivanje = programiranje Dobijeni niz koraka se saoptava raunaru pomou
programskog jezika
O programskim jezicima
Programski jezici su vetaki jezici dizajniranitako da ispunjavaju odreene zahteve Jednoznanost, prihvatljivost za raunar, razumljivost
za oveka... Postoje hiljade programskih jezika Optu sliku moemo stei posmatranjem
razliitih klasifikacija programskih jezika Svaka klasifikacija naglaava jedan kriterijum Ni jedna klasifikacija nije idelana
-
3Klasifikacija po vremenu nastanka(I) Kriterijum: Vreme nastanka
1. 19541958. jezici prve generacije Ustanovili osnove jezika i koncepte implementacije: FORTRAN, ALGOL
58, Flowmatic...2. 19591969. jezici druge generacije Proirili, dogradili, uobliili koncepte jezika prve generacije, neki se jo
uvek koriste: FORTRAN II, ALGOL 60, COBOL 61, LISP3. 19621991. jezici tree generacije PL/I, ALGOL 68, Pascal, Simula: ne toliko uspeni (sem Pascala) Generacijski jaz 197079: CLU, CSP, Ada, Smalltalk pomak ka
strukturama podataka i softverskom inenjerstvu Od 1980. naovamo razvijaju se stilovi programiranja i odgovarajui
jezici: objektno-orijentisani, distribuirani, funkcionalni, relacioni, i dr.4. Od 1991. jezici etvrte generacije Jezici u sistemima za upravljanje bazama podataka, spreadsheet
programima, i uopte script jezici: SQL, jezik Lotusa, dBASE IV
Klasifikacija po zavisnosti od raunara
(II) Kriterijum: Stepen zavisnosti od raunara Mainski zavisni jezici
Mainski, simboliki (asemblerski), makro jezici Mainski nezavisni (vii) jezici
Jezici koji se mogu koristiti na razliitim tipovimaraunara: FORTRAN, BASIC, Pascal, LISP,PROLOG, Ada...
Ovi jezici danas najznaajniji, potrebna preciznijasistematizacija
-
4Klasifikacija po oblasti primene(III) Kriterijum: Oblast najee primene
1. Matematika i tehnika FORTRAN, ALGOL...
2. Poslovna primena COBOL, RPG...
3. Edukativne svrhe Pascal, BASIC...
4. Vetaka inteligencija LISP, PROLOG
5. Univerzalni jezici PL/I, Ada...
6. ... Mogue je dodati mnogo drugih klasa Neki jezici imaju obeleja vie klasa Teko je biti precizan
Klasifikacija po nainu reavanja problema
(IV) Kriterijum: Nain reavanja problema Proceduralni (imperativni)
Jezici zasnovani na naredbama Opisuje se KAKO se problem reava Pascal, C, FORTRAN, COBOL, Ada...
Deklarativni (deskriptivni) Tei se opisu problema, ne nainu reavanja Opisuje se TA se reava Dve potklase:
Funkcionalni: LISP, APL, Miranda, Haskell... Logiki: PROLOG, KLO, Mandala...
-
5Funkcionalni stil programiranja
Kod funkcionalnog stila programiranja,izraunavanje, odnosno izvravanje programazasnovano na pojmu funkcije
Kod logikog stila osnovni pojam je relacija Funkcionalni stil karakteriu samo tri aktivnosti:
Definisanje funkcije Primena funkcije na argumente Kompozicija funkcija
Funkcionalni stil programiranja Program funkcionalnog stila je niz definicija i
poziva funkcija Izvravanje programa je proces izraunavanja
vrednosti funkcije (funkcija) Program poinje da se izvrava primenom jedne
od definisanih funkcija na stvarne argumente Primer Program: f(x) = x2 + 1
g(x, y) = f(x) + 2yz(x) = g(x, 2) 1
Izvravanje programa:z(1) = g(1, 2) 1 = (f(1) + 4) 1 = ((1+1) + 4) 1 = 5
-
6Funkcionalni stil programiranja Da bi pristup funkcionisao, u definiciji funkcije mogu se
koristiti Uslovni izrazi Pozivi iste funkcije (rekurzija)
Izraajne mogunosti funkcionalnog stila nisuograniene
tavie, mali broj aktivnosti i koncepata dovodi doprograma koji su: Jasni i koncizni esto krai od proceduralnih ekvivalenata Kod kojih je tee napraviti greku (i lake otkriti postojeu) Koji se lako mogu realizovati na paralelnim raunarima iju je ispravnost mogue (u nekim sluajevima) formalno
dokazati
Karakteristike funkcionalnog stila
Nepostojanje eksplicitnog zadavanjaredosleda izvravanja
Nepostojanje naredbi Nepostojanje sporednih efekata Funkcije kao ravnopravni objekti Ne-striktna semantika Statiko vezivanje
-
7Nepostojanje redosleda izvravanja
Funkcionalni stil ne poznaje eksplicitno zadavanjeredosleda izraunavanja vrednosti funkcija
Program imperativnog stila: spisak naredbi Program funkcionalnog stila: izraz
Primer Program za gradnju kolibe
Imperativni Funkcionalni- postaviti temelje - zidovi se oslanjaju na pod- sazidati zidove - pod se oslanja na temelje- postaviti pod - krov se oslanja na zidove- postaviti krov
Nepostojanje redosleda izvravanja Primer Program za raunanje faktorijela
fac(n)if n = 0 then 1else n*fac(n-1)
rez := 1;while n>0 do begin
rez := rez*n;n := n-1
end;
FunkcionalniImperativni
Odsustvo ekspliticnog redosleda izvravanja: Poveava deklarativna svojstva programa Smanjuje mogunost greaka (zadavanje pogrenog redosleda naredbi)
Funkcionalni programi: statiki Opisuju odnose, izraavaju definiciju problema
Imperativni programi: dinamiki Zasnovani na promenama stanja koje se izvode u datom redosledu
-
8Nepostojanje naredbi
Imperativni stil zasnovan na postojanju stanja Stanje je sadrano u memorijskim lokacijama Na stanje se utie konstrukcijama jezika, tj.
naredbama dodele, koje se izravaju uodreenom redosledu
Kod odreivanja redosleda koriste se petlje(while, repeat, for...) i uslovne naredbe (if, case)
Rezultat izraunavanja se smeta na odreenulokaciju u memoriji (npr. promenljiva rez)
Nepostojanje naredbi U funkcionalnom stilu nema stanja, ni naredbi Umesto naredbi: izrazi Petlje se ostvaruju rekurzijom Analogon uslovnim naredbama su uslovni izrazi Rezultat izraunavanja se ne stavlja eksplicitno
na neku memorijsku lokaciju, ve ceo programpredstavlja izraz koji oznaava vrednost
Ako ipak elimo da definiemo i menjamo nekostanje, to se postie eksplicitnim prenoenjemstanja u sve izraze
-
9Nepostojanje naredbi Primerfac(n) f(n,1)f(n,a) if n>0 then f(n-1,a*n)else a Odsustvo naredbi i eksplicitno prenoenje
stanja: Poveavaju deklarativnost i jasnou programa Smanjuju mogunost greke jer onemoguuju
sporedne efekte Mogu dovesti do problema pri podeli sloenog
zadatka na jednostavnije, zbog gomilanja parametarakojim se prenose stanja
Nepostojanje sporednih efekata U funkcionalnom stilu ne postoje sporedni efekti:
Isti izraz u istoj okolini uvek oznaava istu vrednost Funkcija pozvana sa istim argumentima uvek daje isti rezultat
Primer Izraz x2 + 1 za x = 3 uvek ima vrednost 10 ln(e) uvek ima vrednost 1
Nepostojanje sporednih efekata omoguava da se sviizrazi koji oznaavaju istu vrednost mogu zameniti jednidrugima Osobina poznata u matematikoj logici kao ekvivalentnost
pominjanja (referential transparency) Primer Ako je y = x2 + 1, tada se izraz y + y moe
pisati i kao x2 + 1 + y, y + x2 + 1 ili x2 + 1 + x2 + 1
-
10
Nepostojanje sporednih efekata U procedurnom stilu sporedni efekti se postiu naredbom dodele Moe dovesti do greaka koje se teko otkrivaju Primer
...VAR a, x: INTEGER;...FUNCTION Fun(i: INTEGER): BOOLEAN;BEGINa := a + 1;
Fun := i = aEND;...a := 0; x := 1;IF Fun(x) = Fun(x) THENWrite(Jednako)ELSEWrite(Nejednako)...
Funkcije kao ravnopravni objekti Funkcije su ravnopravni objekti sa svim drugim
tipovima podataka Mogu se prosleivati drugim funkcijama kao
argumenti Mogu se smetati u strukture podataka Mogu biti vrednosti (rezultati izvravanja) drugih
funkcija Funkcije koje rukuju drugim funkcijama kao
podacima nazivaju se funkcije vieg reda (higherorder functions)
Uporedivi pojmovi u matematici: izvod,neodreeni integral
-
11
Ne-striktna semantika Semantika jezika (stila programiranja) je striktna ako je
svaki izraz striktan (uklj. pozive funkcija) Izraz je striktan akko nema vrednost kada bar jedan od
njegovih operanada nema vrednost Izraz nije striktan ako moe da ima vrednost ak i ako
neki od operanada nemaju vrednost Primer
a = true, b je nedefinisan, koja je vrednost izraza a b?A koja je vrednost izraza car(a . b)?
Ne-striktna semantika U imperativnom stilu samo su logiki izrazi ne-striktni U funkcionalnom stilu svi izrazi mogu biti ne-striktni Realizacija striktne semantike:
Prvo se izraunaju svi operandi izraza (odnosno argumentifunkcije), pa tek onda vrednost samog izraza
Prenoenje argumenata po vrednosti (call by value)
Realizacija ne-struktne semantike: Izraunavanje operanada izraza (argumenata funkcije) se odlae
dok njihove vrednosti ne budu potrebne Zadrano (lenjo) izraunavanje (lazy evaluation), ili princip
odlaganja Prenoenje argumenata po potrebi (call by need)
-
12
Ne-striktna semantika
Prednosti ne-striktne semantike Vea brzina izvravanja Oslobaa programera brige o redosledu
izraunavanja i moguim grekama u tokuizraunavanja
Primer x = 0 1 / x = 10 Omoguava kreiranje beskonanih struktura
Primer Neka je a = (1 . a)Koja je vrednost izraza car(a)?
Statiko vezivanje
Dinamiko vezivanje: Promenljive se zavrednost vezuju u toku izvravanja programa
Statiko vezivanje: Promenljive se za svojuvrednost vezuju u toku definisanja
Primer neka_je n = 1 ineka_je f(z) = z+n i
neka_je n = 2u_izrazu f(3)
Koja je vrednost izraza f(3)?
-
13
O funkcionalnim jezicima Pomenute karakteristike odreuju funkcionalni stil
programiranja Funkcionalni stil je nekad mogue imitirati u jezicima koji
preteno pripadaju nekom drugom stilu Matematika osnova: Lambda raun Snaan razvoj funkcionalnih jezika od 1960-ih Tek noviji jezici poseduju sve karakteristike Funkcionalni jezici mogu imati elemente proceduralnih
(LISP), ili dozvoliti kontrolisanu upotrebu sporednihefekata (ML)
isto funkcionalni jezici (purely functional languages):jezici gde sporedni efekti nisu mogui
Evolucija funkcionalnihprogramskih jezika
Osnove Lambda rauna LISP Iswim ML SASL, KRC, Miranda Haskell
-
14
Osnove Lambda rauna 1930-ih i 40-ih matematiar Alonzo Church radio na
Lambda raunu Lambda raun prvi funkcionalni (ne i programski) jezik Motiv: formalizovati definiciju i primenu funkcije u obliku
rauna Razliito od definisanja funkcija preko parova argumenata i
vrednosti Lambda raun omoguio izraavanje osobine
izraunljivosti funkcije i definisanje funkcije u najoptijemobliku (mogua primena na samu sebe)
Prikazaemo osnove Lambda rauna na intuitivan nain
Osnove Lambda rauna
Osnovni simboli: Imena identifikatora (jedno slovo) Znaci . ( )
Izraz Lambda rauna je jedan od sledeih: x (vrednost identifikatora x) e1e2 (primena funkcije e1 na argument e2) x.e (definicija funkcije, argument x, telo e)
Pri tome su e1, e2 i e izrazi Lambda rauna Zagradama se spreava vieznanost
-
15
Osnove Lambda rauna Primer
x.x se moe posmatrati kao funkcija identiteta f(x) = x Funkcije od vie argumenata se mogu definisati
ugneavanjem izraza Konvencija:
x1.(x2.( ... .(xn.e) ... ) = x1x2...xn.e Primer x.(y.xy) = xy.xy Identifikatori izmeu i . su vezani identifikatori Kod primene funkcije, ako ima vie od jedne primene
funkcije se primenjuju s leva na desno Primer e1e2e3 = (e1e2)e3 , a ne e1(e2e3)
Osnove Lambda rauna
Lambda izrazi se mogu transformisatipravilima za konverziju
Najei cilj uproavanje izraza idovoenje do tzv. normalne forme
Pravila za konverziju: konverzija konverzija konverzija
-
16
Osnove Lambda rauna konverzija ili preimenovanje: svi vezani identifikatori
u izrazu mogu se zameniti drugim identifikatorom Primer x.x z.z
konverzija ili primena: izraz oblika (x.e1)e2 se moekonvertovati u e1 gde su sve pojave identifikatora xzamenjene sa e2 Primer (z.zx)w wx
(xy.xy)(z.z)w (y.(z.z)y)w (z.z)w
konverzija: izraz oblika x.ex se moe konvertovati ue ako x nije vezani identifikator u e Primer (x.((y.yy)x)) (y.yy)
Osnove Lambda rauna Normalna forma je oblik izraza koji se ne moe
dalje uproavati ili konverzijom Veina lambda izraza ima normalnu formu Church i Rosser su pokazali da ako:
Ako izraz ima normalnu formu, ona je jedinstvena Nije bitan nain na koji se do nje dolazi, to pogoduje
realizaciji na paralelnim raunarima Ako izraz ima normalnu formu, tada postoji postupak
redukovanja s leva na desno koji sigurno dovodi donormalne forme
Postupak je ekvivalentan zadranom (lenjom) izraunavanju
-
17
Osnove Lambda rauna Lambda izrazima se mogu izraziti:
Prirodni brojevi Funkcije i operacije nad prirodnim brojevima Logike vrednosti Uslovni izraz (if-then-else) Rekurzija ...
Lambda izrazima se mogu predstaviti pravi funkcionalniprogrami
Izraunavanje vrednosti izraza se svodi na primenu ili konverzije dok se ne doe do normalne forme, kojapredstavlja rezultat
Principi funkcionalnog stila programiranja vidljivi ve uLambda raunu
LISP LISP = LISt Processing Prvi funkcionalni programski jezik Tvorac John McCarthy 1950-ih Namenjen simbolikom manupulisanju
podacima, za razliku od FORTRAN-a ija jenamena numerika manipulacija
Primena u vetakoj inteligenciji Lambda raun nije uticao na pojavu i
mogunosti prvog LISP-a LISP je zajedno sa Lambda raunom uticao na
kasnije jezike
-
18
LISP
Osnovni doprinosi LISP-a: Uslovni izraz (if-then-else) Lista (s-izraz) kao osnovna stuktura podataka Funkcije kao ravnopravni objekti Automatsko dodeljivanje memorijskog
prostora u toku izvravanja programa iskupljanje otpadaka (garbage collection)
LISP
Sami LISP programi imaju oblik s-izraza,tako da je jednostavno programu damanipulie drugim programima
Osobine prvih verzija LISP-a: Sadravali i procedurne elemente (naredba
dodele, redosled izvravanja) Striktna semantika Dinamiko vezivanje
Operatori jezika zadaju se prefiksno
-
19
LISP Primer Faktorijel u LISP-u(define fac (n)(if (= n 0)1(* n (fac (- n 1))))) LISP se razvio u mnogo verzija i nije standardizovan Unapreenja uglavnom ila u smeru uvoenja
proceduralnih elemenata u LISP ak su i funkcije izgubile ravnopravni status LispKit LISP i Scheme vratili istou jeziku
Uglavnom poseduju navedenih 6 karakteristika
Iswim Iswim = If you see what I mean Skup isto funkcionalnih jezika sa zajednikom
osnovom Tvorac Peter Landin 1966. Nezavisan od LISP-a i snano zasnovan na
Lambda raunu Doneo drugaiju sintaksu:
Program nije u obliku s-izraza, svaka konstrukcija unovom redu, obavezno uvlaenje
Zamena izraza oznakama pomou LET i WHEREizraza
Infiksni operatori
-
20
Iswim
Iswim je bio prvi jezik sa atributomdeklarativan, i krivac je za frazu TA seizraunava, a ne KAKO
Posedovao sve karakteristike funkcionalnog stilasem ne-striktne semantike (iz tehnikih razloga)
Prvi jezik realizovan pomou apstraktnog SECDraunara
Nikad nije efikasno realizovan, koristio se samou istraivake svrhe
FP FP = Functional Programming Prvi funkcionalni jezik koji je privukao panju ire javnosti Tvorac John Backus 1977. (takoe jedan od dizajnera
FORTRAN-a i ALGOL-a) Backus 1977. promovisao jezik u govoru na dodeli
Turing-ove nagrade koju je dobio zbog doprinosaproceduralnim jezicima Okarakterisao procedurni stil kao lo i kao odraz arhitekture
raunara, i podrao funkcionalni stil Utvrdio da jezici zasnovani na Lambda raunu nemaju
budunost i predloio pristup zasnovan na malom broju tzv.kombinujuih oblika, to se nekad granii sa nerazumljivou
-
21
FP Primerexp = (2& eq() -> !1;
[1, 2& iota] & dist/ & @1 & /*)
Striktna semantika Na FP uticao APL (A Programming Language)
K. Iverson-a Kasniji razvoj funkcionalnih jezika je otiao u
drugom pravcu, kom se Backus prilagodio unovom jeziku FL
ML
ML = MetaLanguage Realizovan priblino kad je FP promovisan Najprofesionalniji i najkompletniji funkcionalni
jezik u datom trenutku Tvorac J. M. Gordon (na eli tima istraivaa) Nuzproizvod rada na dokazivau teorema Na njega uticao jezik Hope (R. M. Burstall) Striktna semantika, ulaz/izlaz, programski moduli
-
22
ML
Doprinosi ML-a: Tipovi podataka
Polimorfizam (mogunost da funkcije i strukture podatakarade sa proizvoljnim tipovima)
Definicija novih tipova podataka (preuzeto iz Hope-a) Zadavanje izraza pomou tzv. prepoznavanja oblika
(pattern recognition, takoe iz Hope-a) Dijalekti:
SML (Standard ML) LML (Lazy ML ne-striktna semantika)
SASL, KRC, Miranda SASL = St. Andrews Static Language Prvi jezik D. A. Turner-a Trei pravac razvoja funkcionalnih jezika
pravac modernih jezika koji poseduju svih 6karakteristika
SASL zasnovan na Iswim-u i radovima J.Darlingtona
Ne-striktna semantika (prvi put) Realizacija jezika preko tzv. kombinatora
Programi podseaju na matematiku notaciju
-
23
SASL, KRC, Miranda
Primer
fac n = 1, n = 0= n * fac(n-1), n > 0
Svaka funkcija u SASL-u je tzv. Curry-jevafunkcija, tj. funkcija nastala ugnedavanjem viefunkcija od jednog argumenta
SASL, KRC, Miranda Prepoznavanje oblika u zadavanju izraza:
Sluajevi se ne moraju zadavati uslovnim izrazima i ugraenimfunkcijama, ve karakteristinim oblikom
Primer Dva programa za izraunavanje duine liste
Prepoznavanjem oblika:len [] = 0,
(x:l) = 1 + len lKlasino pomou uslovnog izraza:
if l = [] then 0else 1 + len(cdr(l))
-
24
SASL, KRC, Miranda KRC = Kent Recursive Calculator Naredni funkcionalni jezik D. A. Turner-a Na sve osobine SASL-a dodaje ZF-izraze, pogodan
nain za definisanje sadraja listi Primer Lista kvadrata svih neparnih brojeva od 1 do 100:
[x*x | x
-
25
Haskell Nastao 1990. kao posledica:
Postojanja velikog broja funkcionalnih jezika Potrebe za saimanjem dobrih osobina u jedan jezik
Ime u ast Haskell B. Curry-ja, tvorca kombinatornelogike
Rezultat napora desetine istraivaa Nastavlja niz Iswim, SASL, KRC, Miranda Polako se namee kao standard u oblasti funkcionalnog
programiranja Uvodi isto funkcionalno manipulisanje nizovima, ulazno-
izlaznim operacijama, i neke nove koncepte Od 2009. dostupan u formi Haskell Platform, koja
objedinjuje prevodilac, iroko koriene alate i bilioteke