Na ovom predmetu, i u nastavku knjige, bavićemo se logičkom i funkcionalnom paradigmom, i programskim jezicima koji podržavaju ove paradigme. Budući da se i jedni i drugi bave sličnim problemima, prvi deo knjige pokriva teorijske koncepte koji leže ispod ovih jezika, odnosno koncepte nad kojima su ovi jezici izgrađeni. Ove koncepte možete smatrati „matematikom“. Bavićemo se iskaznom i predikatskom logikom.
Logički programski jezik - Prolog
Logički programski jezik koji je i dalje de-facto standard je Prolog. Nastao je 1972. godine. Trenutno aktuelni standard je iz 1998. godine a raspoloživi alati, kompajleri i razvojna okruženja su stari nekih 15ak godina.
Logička paradigma ima primenu u oblastima koje nisu preterano komercijalno interesantne, tako da postojeći alati, iako na prvi pogled stari, sasvim dobro završavaju posao i, imajući u vidu da je Prolog star okruglo 50 godina, može se reći da je ovo prilično zrela tehnologija.
Neke primene logičke paradigme su: automatsko dokazivanje, testiranje i verifikacija softvera i modela, ekspertski sistemi. U velikoj meri domen je teorijski i konceptualni, budući da je uglavnom moguće i praktično (isplativo, održivo) sisteme implementirati u drugim jezicima. Prolog otud tipičnom programeru predstavlja tek interesantan, pomalo ezoteričan, programski jezik. Međutim, u svom polju primene je nezamenjiv i izuzetno kvalitetan jezik za rad. Ako se budete bavili uobičajenim poslovima u industruji Prolog ćete možda sresti kao deo većeg sistema, gde je komponenta sistema pisana u ovom jeziku a vi sa njom komunicirate kao sa crnom kutijom.
Funkcionalni programski jezici
Funkcionalna paradigma je pre 20ak godina doživela novu renesansu i u nekom trenutku nastao je čitav hype oko funkcionalnog programiranja i ugrađivanja podrške funkcionalnim konceptima u ne-funkcionalne jezike. Delom je to izazvano kolektivnom mržnjom prema jeziku Java i, posledično, objektno orijentisanoj paradigmi (što je samo po sebi jako loš razlog) a delom željom za isticanjem u nečem u tom trenutku novom (self-branding na neki način, još jedan loš razlog). Malim delom postoje i realni, praktični, razlozi da se tradicionalno imperativni i objektno orijentisani jezici obogate funkcionalnim konceptima, na šta se na kraju i svelo uglavnom, ali i to svakako treba koristiti promišljeno i primereno.
Funkcionalna paradigma razvijena je još 50ih godina. Lisp, prvi funkcionalni jezik, napravljen je 1958. godine, nedugo nakon Fortrana, a prilično pre C-a, koji je osnov za „moderne“ programske jezike na koje smo navikli (C#, Java, PHP, JavaScript svi vuku korene iz C-a). Sa jedne strane imamo LISP i njegove kasnije derivate (CommonLISP) a sa druge imamo ML (nastao 20 godina kasnije) iz kog su proistekli Ocaml i Haskell. Sva tri su aktuelni i koriste se, i postoje razvojna okruženja i kompajleri. LISP se smatra „jezikom sa previše zagrada“ dok se Haskell uzima kao primer „čistog“ funkcionalnog jezika. Trenutno aktuelni standard Haskell jezika je iz 1998. godine, što ide u prilog tome da je i ovo jedan zreo i dobro definisan jezik. Haskell se koristi i za pisanje veb servisa i postoji nekoliko framework-a za Haskell za web.
Funkcionalna priroda jezika omogućava pouzdano testiranje, pa je Haskell prilično omiljen u bankarskom sektoru, kao jezik za implementiranje procedura koje se tiču finansija.
Funkcionalni programski jezici se lako paralelizuju, zapravo su sami po sebi inherentno paralelni, pa je to još jedan razlog rasta popularnosti ove paradigme.
Python je u nekoj meri funkcionalan, i otprilike da je u svojoj osnovi zamišljen kao funkcionalni jezik međutim to nije izvedeno do kraja kako treba pa se zbog određenih nedoslednosti i propusta ne smatra funkcionalnim jezikom.
JavaScript želi da bude funkcionalan jezik, kako bi pisci mogli da se hvale da pišu programe u funkcionalnoj paradigmi, ali to nije, baš kao što nije ni objektni jezik kako treba. Postoje neki derivati koji se transpajliraju (prevode) u JS, ali to samo dodatno doprinosi celom ludilu. Ova grana razvoja je izvesno potstaknuta overhype-ovanjem funkcionalne paradigme u hipsterskim krugovima i više je političko-ekonomska nego tehnološka.
Haskell će nam biti primarni jezik kroz koji ćemo savladati koncepte funkcionalne paradigme. Upravo zbog popularnosti paradigme napravićemo osvrt i na druge trenutno popularne jezike i njihovu podršku funkcionalnim konceptima.