(eng. ) je programski jezik koji je razvio 1970-ih godina na Univerzitetu u Edinburgu.[1] Njegova sintaksa je inspirisana -om ( je apstraktni programski jezik smišljen od strane ; akronim predstavlja ). Pripada funkcionalnoj i imperativnoj programskoj paradigmi.

Pregled jezika

  • strogo tipiziran programski jezik - u osnovi jezika je lambda račun kojem je dodata stroga tipizacija.[2] Strogi sistem tipova pruža mogućnost za optimizaciju, tako da se uskoro pojavljuje kompilator jezika.
  • poziv po vrednosti (eng. ) - funkciji se prosleđuju vrednosti promenljivih, koje se koriste u telu funkcije (rezultat rada funkcije zavisi od tih vrednosti), ali one same ne mogu biti promenjene
  • funkcije višeg reda - uzima jednu ili više funkcija kao argumente (procesni parametri) i vraća funkciju kao rezultat. U lambda računu sve funkcije su višeg reda.
  • automatsko upravljanje memorijom - osnovna forma automatskog upravljanja memorijom je sakupljač smeća (eng. ). On funkcioniše tako što pokušava da pokupi smeće ili memoriju okupiranu objektima koje program više ne koristi.
  • parametarski polimorfizam - pomoću parametarskog polimorfizma funkcije ili tipovi podataka mogu biti napisani tako da se može prenositi vrednost. To su generičke funkcije, odnosno tipovi podataka.
  • statički doseg - to znači da ne mogu da se menjaju vrednosti promenljivih, već može samo da im se pristupi.
  • upotreba Hindley Milner algoritma, koji može zaključivati tipove većine vrednosti bez zahtevanja iscrpnih anotacija.

Funkcija jezika

je skraćenica od metajezik: bio je zamišljen za razvijanje metoda dokaza teorema. Zbog dizajna i jednostavnog rukovanja podacima, koristi se prilikom programiranja prevodioca, analizatora, dokazivača teorema. Kao programski jezik opšte namene, svoju primenu nalazi i u bioinformatici, finansijskim sistemima itd. Ima odličnu podršku za algebarske tipove podataka (), što ga, zajedno sa idejom o razvijanju metoda dokaza, čini veoma pogodnim za programiranje nekih matematičkih softvera.

Veza sa drugim jezicima

Glavni jezici koji pripadaju -u su i . Osim njih, postoje i drugi - poput jezika , koji se koristi kao podrska . Kao što je pomenuto na početku, zbog osobina koje ga karakterišu, ne pripada isključivo jednoj programskoj paradigmi. Pripada prvenstveno funkcionalnoj paradigmi, međutim, bez obzira na to što ohrabruje funkcionalno programiranje – on nije isključivo funkcionalan (poput jezika kao što je ) jer on ne dozvoljava bočne efekte. Osim funkcionalnoj, pripada i imperativnoj paradigmi.

Kao predstavnik ove dve paradigme, on ima neke zajedničke osobine sa njihovim ostalim predstavnicima:

  • jezici na koje je uticao: , , [3]
  • jezici koji su uticali na nastanak i razvoj programskog jezika:

Prednosti i mane

Prednosti

  • portabilnost koda: program napisan na jednoj platformi može da se koristi (prenosi i izvršava) bilo gde – što je značajno zbog uniformnosti pisanja koda (samim tim se i izmene jednostavno vrše), ali, sa druge strane, arhitekturu određenog računara nećemo moći maksimalno da iskoristimo ovim uniformnim pristupom
  • dizajn jezika: iako je strogo tipiziran, programeri uglavnom ne moraju da eksplicitno pišu deklaracije tipova – što kodove pisane u ovom programskom jeziku čini kompaktnim i veoma čitljivim (čitljivijim od mnogih čija sintaksa zahteva eksplicitnu deklaraciju tipova)
  • ima odličnu podršku za algebarske tipove podataka, što ga čini veoma pogodnim za rad sa odgovarajućim matematičkim izrazima
  • omogućena je jednostavna manipulacija podacima

Mane

  • mala baza korisnika
  • slaba programska podrška (nedostatak -a, -a itd.)

Tipovi podataka

Osnovni tipovi podataka su (celobrojni), (realni), (stringovni), (logički). Od njih možemo konstruisati objekte korišćenjem torki, lista ili funkcija, a možemo kreirati i naše tipove.

Torke

Torka je niz objekata mešovitog tipa. Primer torke:

 ()[4]

Liste

Lista mora imati komponente istog tipa i mogu biti bilo koje dužine. Postoje dva konstruktora listi: prazna lista i operator :: . Konstruktor je lista koja ne sadrži ništa, operator :: uzima stavku sa leve strane i listu sa desne da bi vratio listu za jedan dužu od originalne. Primeri:

                               []  
                           [1]  
                      [2,1][4]

Operator @ se koristi za spajanje dve liste, na primer:

 [1,2,3] @ [4,5,6] = [1,2,3,4,5,6][4]

Funkcije

Funkcije se definišu korišćenjem ključne reči .

Definicija jednostavne funkcije ima formu:

 ; 

Primeri jednostavnih funkcija:

 ;  
 ; 
 

Za izvršavanje funkcije jednostavno napišemo ime funkcije i u nastavku argument sa kojim pozivamo funkciju. Na primer:

 ;  
 ; 
 ;  

Sistem vraća vrednosti:

 12 : 
 101 : 
 

Primer rekurentne funkcije:

 
 | 

Kada je argument funkcije 0, ona će vratiti broj 1. Za sve ostale slučajeve se izvršava druga linija. Ovo je rekurzija, pa se funkcija izvršava ponovo sve do baznog slučaja.

Reference

Spoljašnje veze

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.