Anonimne funkcije
<s>U programiranju, anonimna funkcija je funkcija definisana tako da nije vezana za identifikator.</s><s>Anonimne funkcije su cesto:
 argumenti prosledjeni funkcijama viseg reda, ili
 se koriste za konstruisanje rezultata funkcije viseg reda koja treba da vrati funkciju.</s><s>Ako se funkcija koristi jednom, ili ogranicen broj puta, anonimna funkcija moze biti sintaksicki "laksa" od koriscenja imenovane funkcije.</s><s>Anonimne funkcije su ceste u jezicima funkcionalnog programiranja i jezicima koji podrzavaju funkcije prve klase (first-class funkcije), gde ispunjavaju ulogu tipa funkcije kao sto literali rade za tipove podataka.</s>

<s>Anonimne funkcije je uveo Alonzo Cerc kada je otkrio lambda racun 1936. godine, pre nastanka elektronskih racunara, kada su sve funkcije bile anonimne.</s><s>U nekoliko programskih jezika, anonimne funkcije su predstavljene kljucnom recju lambda, i anonimne funkcije se cesto nazivaju lambdama ili lambda apstrakcijama***.</s><s>Anonimne funkcije su deo programskih jezika jos od nastanka programskog jezika Lisp 1958. i sve veci broj modernih programskih jezika podrzava anonimne funkcije.</s><s>Takodje anonimne funkcije se mogu posmatrati kao forma ugnjezdenih funkcija.</s>

<s>Upotreba 
Anonimne funkcije mogu biti koriscenje za funkcionalnost koja ne treba biti imenovana i za kratkotrajnu upotrebu.</s><s>Neki bitniji primeri su u koriscenju closure i currying funkcija.</s>

<s>Koriscenje anonimnih funkcija je pitanje stila.</s><s>Njihovo koriscenje nikada nije jedini nacin za resavanje problema; Svaka anonimna funkcija moze biti definisana imenovanom funkcijom i biti pozivana imenom.</s><s>Neki programeri koriste anonimne funkcije za pisanje kodova koji se nece izvrsavati vise puta, a u sebi sadrzi veliki broj jednolinijskih funkcija.</s>

<s>U nekim programskim jezicima, anonimne funkcije se cesto implementiraju za veoma specificne potrebe kao sto je koriscenje u obliku callback funkcija, ili instanciranje funkcije za konkretne vrednosti, koje mogu biti efikasnije, citljivije i manje sklone greskama nego imenovane funkcije.</s>

<s>Kod u sledecim primerima je napisan u jeziku Python 2.x .</s>

<s>Sortiranje 
Kad pokusavamo da sortiramo nestandardnim nacinom, koriscenje anonimne funkcije u komparacione svrhe moze biti jednostavnije od koriscenja imenovanih funkcija.</s><s>Vecina jezika nudi genericku funkciju koja implementira algoritam za sortiranje koji ce sortirati proizvoljne objekte.</s><s>Ove funkcije obicno primaju proizvolju funkciju poredjenja koja prima dva proizvoljna objekta i vraca vrednosti manje od 0, 0 ili vece od 0 u odnosu na to da li je drugi prosledjen objekat veci, jednak ili manji od prvog prosledjenog.</s>

<s>Sortiranje liste stringova po njihovoj duzini:>>> a = ['house', 'car', 'bike']
>>> a.sort(lambda x,y: cmp(len(x), len(y)))
>>> print(a)
['car', 'bike', 'house']Anonimna funkcija u ovom primeru je lambda izraz:lambda x,y: cmp(...)Anonimna funkcija prima dva argumenta, x i y, i vraca poredjenje izmedju njih koristeci ugradjenu funkciju cmp().>>> a = [10, 'number', 11.2]
>>> a.sort(lambda x,y: cmp(x.__class__.__name__, y.__class__.__name__))
>>> print(a)
[11.2, 10, 'number']</s>

<s>Closure 
Closure funkcije su funkcije koje imaju vrednost u okruzenju koje sadrzi 'bound' promenljive.</s>

<s>Sledeci primer povezuje promenljivu "threshold" sa anonimnom funkcijm koja poredi ulaz sa njom.def comp(threshold):
    return lambda x: x < thresholdOvo moze sluziti kao generator funkcija poredjenja.>>> func_a = comp(10)
>>> func_b = comp(20)</s>

<s>>>> print func_a(5), func_a(8), func_a(13), func_a(21)
True True False False</s>

<s>>>> print func_b(5), func_b(8), func_b(13), func_b(21)
True True True FalseBilo bi neprakticno kreirati funkciju za svaku funkciju poredjenja i moze biti neprakticno cuvati vrednost po kojoj se poredi za dalju upotrebu.</s><s>I pored razloga zasto se closure funkcije koriste, anonimne funkcije su entitet koji sadrzi funkcionalnost koja vrsi poredjenje.</s>

<s>Currying 
Currying je proces promene funkcije da bi bilo potrebno manje ulaznih vrednosti (u ovom slucaju transformacija funkcije koja izvodi deljenje bilo kog celog broja u onu funkciju koja vrsi deljenje sa skupom celih brojeva).>>> def divide(x, y):
...     return x / y</s>

<s>>>> def divisor(d):
...     return lambda x: divide(x, d)</s>

<s>>>> half = divisor(2)
>>> third = divisor(3)</s>

<s>>>> print half(32), third(32)
16 10</s>

<s>>>> print half(40), third(40)
20 13Koriscenje anonimnih funkcija nije cesta kod currying tehnike, ali se moze koristiti u te svrhe.</s><s>U primeru iznad, funkcija divisor generise funkciju sa konkretnim deliteljem.</s><s>Funkcija half i third izvodi funkciju divide sa fiksiranim deliteljiim.</s>

<s>Funkcija divisor takodje primenjuje clousure tehniku tako sto vezuje promenljivu "d".</s>

<s>Funkcije viseg reda 
Python 2.x sadrzi nekoliko funkcija koje primaju anonimne funkcije kao argument.</s><s>Ovaj odeljak opisuje njih.</s>

<s>Map 
Map funkcijavrsi poziv funkcije nad svakim elementom liste.</s><s>Sledeci primer kvadrira svaki element u nizu anonimnom funkcijom.>>> a = [1, 2, 3, 4, 5, 6]
>>> print map(lambda x: x*x, a)
[1, 4, 9, 16, 25, 36]Anonimna funkcija prima argument i mnozi ga sobom (kvadrira ga).</s><s>Po misljenju kreatora jezika, forma iznad nije preporucljiva, vec predlazu sledecu formu sa istim znacenjem a bolje se uklapa sa namenom jezika:>>> a = [1, 2, 3, 4, 5, 6]
>>> print [x*x for x in a]
[1, 4, 9, 16, 25, 36]</s>

<s>Filter 
Filter funkcija vraca sve elemente liste koje imaju vrednost True kad ih prosledimo odredjenoj funkciji.>>> a = [1, 2, 3, 4, 5, 6]
>>> print filter(lambda x: x % 2 == 0, a)
[2, 4, 6]Anonimna funkcija proverava da li je prosledjeni argument paran.</s><s>Isto kao u slucaju sa mapom, kod ispod je preporucljiviji.>>> a = [1, 2, 3, 4, 5, 6]
>>> print [x for x in a if x % 2 == 0]
[2, 4, 6]</s>

<s>Fold 
Fold/reduce funkcija prolazi kroz sve elemente liste (obicno s leva na desno), i nagomilava vrednost pri tom prolasku.</s><s>Cesta upotreba ovoga je kombinovanje elemenata liste u jednu vrednost.</s><s>Na primer:>>> a = [1, 2, 3, 4, 5]
>>> print reduce(lambda x,y: x*y, a)
120Ovo izvrsava sledece</s>

<s>Anonimna funkcija ovde je mnozenje dva argumenta.</s>

<s>Rezultat fold funkcije mora biti jedna vrednost.</s><s>Umesto toga, i mapa i filter mogu biti kreirani korisnjenjem fold funkcije.</s><s>U mapi, vrednost koje je nagomilana je zapravo nova lista koja sadrzi rezultate primene funkcije na svaki element originalne liste.</s><s>U filter funkciji, vrednost koja je nagomilana je nova lista koja sadrzi samo one elemente koji ispunjavaju odredjen uslov.</s>

<s>Spisak jezika 
Sledeca lista programskih jezika neimenovane anonimne funkcije podrzava u potpunosti, delom, ili ne podrzava.</s>

<s>Ova tabela ukazuje ne neke opste trednove.</s><s>Jezici koji ne podrzavaju anonimne funkcije(C, Pascal, Object Pascal) su konvencijalni strogo tipizirani jezici.</s><s>Medjutim, strogo tipizirani jezici mogu podrzavati anonimne funkcije.</s><s>Na primer, ML jezici su strogo tipizirani i sadrze anonimne funkcije, i Delphi, kao dijalekt objektnog Pascal-a je nadogradjen tako da podrzava anonimne funkcije.</s><s>Takodje, jezici koji tretiraju funkcije kao 'funkcije prvog reda'(Dylan, Haskell, JavaScript,Lisp,ML, Perl,Python, Ruby,Scheme) sadrze anonimne funkcije tako da mogu biti definisane i prosledjene jednostavno kao i tipovi podataka.</s><s>Medjutim, novi C++11 standard ih dodaje C++-u iako je konvencijalan, strogo tipiziran jezik.</s>

<s>References</s>

<s>Programiranje</s>

