Na zalost, ne radim jos uvek profesionalno u haskellu. Jos uvek ga intenzivno ucim i projekte koje sam radio u drugim jezicima portujem na haskell. Vizija mi je da napisem vise aplikacija u haskellu koje ce imati komercijalnu upotrebu. Za sada imam sjajna iskustva u smanjenju broja linija koda i eleganciji nekih stvari kako su napisane (o tome sam vec pisao). Predpostavljam kako bi tek neki haskell guru mogao da napise kod.
U svojoj karijeri sam najvise koristio .net (c# i vb) i python. U firmi u kojoj radim python se koristi skoro za sve sa veoma velikom efikasnoscu, ali ne verujem da ce ikad biti spremni da predju na haskell jer im python odradjuje posao.
Funkcionalno programiranje je veoma velika promena u nacinu razmisljanja i pisanja koda. Ne posmatraju se objekti nego tokovi vrednosti. Ne postoji imperativnost - redosled izvrsavanja insktrukcija (naravno i to je i moguce i potrebno, ali nije osnovni nacin programiranja) nego uzajamna veza funkcija prilikom evaluacije vrednosti. Funkcije su prave funkcije u matematickom smislu, za iste ulazne argumente ce uvek dati isti rezultat. Instrukcija tipa 'ispisi mi ovaj tekst na ekran' nije funkcija nego akcija koja se u haskellu radi uz pomoc monada. Monade su jednostavan nacin da se uvede interatktivnost a da se ne izgubi cisto funkcionalno programiranje. Tesko se uce ali kad se usvoje pruzaju sjajnu moc prilikom kompozicije i resavanja raznih problema u praksi.
Funkcionalno programiranje pruza mnogo vecu mogucnost i slobodu kompozicije i apstrakcije problema. Koncepti funkcija viseg nivoa (funkcije koje primaju druge funkcije kao argumente i/ili kao rezultat vracaju druge funkcije), kontinuacije, pattern matching (ne mislim da regex), klase tipova itd. su mnogo napredniji i mocniji koncept od svega sto sam do sada video i koristio. Naravno, postoje te mogucnosti i u imperativnim jezicima slicni nekim od pomenutih npr. delegati u .net-u, pointeri na funkcije u c-u, generici u c++, c#, i javi, virtualni polimorfizam u oo paradigmi i sl. ali su daleko primitivnije u osnovu na slicne koncepte u haskellu. Vidim kao novine u pomenutim imperativnim jezicima elemente npr lambda izrazi i list abrevations. Da ne budem pogresno shvacen, pomenuti imperativni jezici su sjajni, oo je odlicna paradigma za projektovanje i realizaciju sofware-a,... sve to odlicno radi posao. Medjutim, u haskell-u sam naucio mnogo novih stvari, cak i mogucnosti da ih upotrebim u imperativnom programiranju na mnogo efikasniji nacin.
šteta što je rasprostranjen i što ima malo dodatnih modula.
oko 1200 komda, razvija se od 90'.
istina u tim dodatnim modulima ima šve što treba, ali za razliku od perla gdje se na cpan dodaju od 97' pa sadrži oko 15000 modula.
python se razvija od deveteset nekoje,oko 5000 modula.
jezik kao jezik je malo čudan, ali jako efikasan koliko sam vidio i kako se priča.
e sad, ono što je problem jest izumiranje pojedinih jezika.
postoji na nekoliko stotina jezika, onda samo basic-a ima nekoliko desetina.
i čovjek je od svega lud.
i šta sad se počne razvoj u jednom dogura se sa njime do 500 k linija i onda jezik umre ili više nije popularan.
@ xaotuk
iz koje knjige učiš, ja sam skinuo dvije knjiga, pa ću malo proučavat.
gnu emacs sa haskell modom, yasnippet-om, autocomplete, semantics, ecb, fly-make,...
Ako nisi radio u emacsu, bice ti tesko da istovremeno ucis emacs i haskell. Ima jos editora sa haskell modom, mislim da neki notepad+ za windows. Vim, ako ga znas, takodje ima haskell mod.
Eclipse ima okruzenje za haskell, a cuo sam i za Visual Haskell plugin za VS.
Takodje, postoji yi editor pisan u haskellu, sa emulacijom dosta poznatih editora.
Fibonacijev (beskonacan) niz je 0,1,1,2,3,5,8,... Predpostavljam da ti treba da ispitas da li je neki zadat ogranicen niz prvih n brojeva ovog beskonacnog niza. Ako gresim, ispravi me.
U ovom slucaju mozes iskoristiti definiciju sa haskell wiki-ja preko beskonacne liste:
pa ne znam odakle ti ta informacija...
javascript je, izmedju ostalog, i funkcionalan jezik i koliko ja vidim veoma dosta ljudi "kod nas" ga razume i interesuje se za njega :)
Potpis
po definiciji funkcionalni jezici su oni u kojima su funkcije first-class objekti (mozes da prosledis funkciju kao argument drugoj funkciji, da je vratis kao rezultat fje ili da je dodelis nekoj promenljivoj)
a funkcionalan nacin programiranja se moze primeniti na sve jezike koji imaju neku vrstu referenciranja funkcija (pointer to function npr), pa tako i na npr klasican C...
Potpis
pa nije tacno da se tesko uci. tj kako za koga. nekome sa dobrim znanjem matematike a nikakvim znanjem programiranja mnogo je lakse da nauci recimo haskell nego c, jer mu je nacin razmisljanja blizi.
ne zovu se funkcionalni jeziki dzabe "akademskim" jezicima :)
mada je istina da se u poslednje vreme povecalo koriscenje funkcionalnih jezika i u komercijalnom smislu. neki ce reci da je buducnost programiranja na funkcionalnim jezicima... videcemo :)
Potpis