Ro/Haskell/Introducere

From HaskellWiki
< Ro/Haskell
Revision as of 18:17, 12 May 2009 by Ha$kell (talk | contribs) (Introduction - moved on a separate page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Haskell - Un limbaj functional pur

Haskell este limbajul functional succesor al LISP-ului, Scheme-ului si ML-ului !!!
Cel mai productiv limbaj functional ! Limbajul folosit de autorii limbajului Perl 6 si ales de echipa Linspire, utilizat la Inteligenta artificiala, prelucrari multimedia, Retele Petri, programare functionala in Robotica, sinteza de circuite electronice, motoare de baze de date , cercetare , productie de software "type safe",productie de limbaje (DSL-uri, cum este Limbajul Pseudocod Rodin ), proiectare automata de scheme electronice, analize statistice si financiare (bancare)...
V-am starnit curiozitatea ? Cititi: Intrebarile incepatorului. Am adaugat raspunsuri noi (16 dec. 2007- 10 feb. 2008). Informatiile pentru studenti sunt la punctul 18, incepeti de acolo. Sau la pagina despre lucrari de licenta.


Nota: Pagina cursului Ro/Haskell/Fundamentele Programarii o puteti gasi si la indexul Ro de sus,dar la, litera R.

Stirile pina in 2008:Stiri Ro/Haskell Stirile din 2009: Stiri Ro/Haskell-2009

Cuprinsul paginii :


Introducere

Haskell este un limbaj de uz general, din categoria limbajelor functionale pure (fara instructiuni imperative sau producatoare de efecte laterale). Foloseste Lazy Evaluation. Beneficiaza de un sistem de tipuri revolutionar, cu Tipuri polimorfice si Clase de tipuri. Permite programarea cu clase si instante de clase defiinite utilizator, clasele fiind multimi de structuri algebrice (adica mai mult decat multimi de obiecte).

Haskell permite nu numai sa scrii algoritmi ci sa si MANIPULEZI algoritmi - totul sub un control riguros al tipizarii inaccesibil in LISP. Doriti sa sumati sau sa integrati o functie ... banal. Exista un capitol din Introducere in Haskell 98 prin exemple disponibil printre acele Capitole de manual.

  • Doriti sa gasiti optimul unei functii oarecare ? Se rezolva.
  • Un algoritm genetic cauta optimul altui proces ? Simplu de realizat.
  • Doriti sa combinati semnificatiile unor fragmente de limbaj pentru a scrie un compilator sau interpretor ? Nimic mai simplu. Uitati-va la Proiecte si vedeti cum se scrie un soi de LISP pe nume Scheme in 48 de ore (Scheme in 48 de ore - tutorial.).

In Pascal ati fi scris programe: In Haskell

  • manipulati programe,
  • operati cu programe,
  • combinati programe,
  • scrieti generatoare de programe sau
  • optimizatoare de functii/programe.

Un program de Inteligenta artificiala combina comportamente simple intr-unul complex, inteligent ? Se programeaza imediat in Haskell.

Si lista ar putea continua... Exista cel putin 37 de motive pentru a folosi Haskell (Ro/Haskell/MotiveProHaskell), in paginile web de limba engleza.

Haskell este DEOSEBIT: El are o sintaxa bidimensionala (bazata pe notiunea de Layout) asa ca simpla aliniere corecta pe verticala va scuteste de paranteze ! Iar daca puneti un spatiu in PLUS nu e o greseala. Sintaxa bidimensionala face programele mult mai clare decat echivalentele lor in LISP (netipizat si cu multe paranteze: LISP = Limbajul InSuportabilelor Paranteze) sau cele in Scheme ori ML. Alte plusuri sunt tipizarea stricta, existenta monadelor si a do-notatiei (o scriere cvasi imperativa posibila intr-un limbaj functional pur) precum si existenta listelor infinite si a "multimilor ordonate" definite descriptiv, numite in manualele de Haskell (in limba engleza) "list comprehensions".

Productivitatea programarii in Haskell este net superioara altor limbaje, un algoritm Quicksort scriindu-se in doar 3-4 linii de program nu in 30-40 ca in C sau C++. Dati un click pe link-ul Quicksort pentru a-l vedea.

Unul din motivele pentru care Haskell este atat de productiv este posibilitatea de a lucra cu functii de nivel superior, polimorfice, operand inclusiv pe structuri de date definite inductiv. Acele structuri de date beneficiaza de functii de afisare si comparare (si nu numai) generate automat prin "deriving" ori, la nevoie definite de utilizator.

V-ati batut capul nu o data sa rescrieti rutinele de afisare ale unor structuri de date compuse (liste de arbori cu noduri perechi de ... samd) care se schimbau pe masura ce dezvoltati proiectul ? Ati refacut mereu functiile de comparatie pentru astfel de structuri de date compuse ? Folositi Haskell si adaugati declaratiilor de date "deriving Show" respectiv "deriving Eq" (Iar lista nu se opreste aici.) Haskell face automat restul si tipul nou creat capata din clipa declararii functiile de afisare sau comparare ce-i sunt necesare fara sa le scrieti dumneavoastra ! Dar le puteti rescrie daca nu va plac.

Exista o multime de compilatoare si interpretoare pentru Haskell si sunt disponibile gratuit. Hugs e un interpretor bun pentru primele lectii de Haskell. GHC este un compilator pentru proiecte profesionale. Cititi va rog si paragraful despre: Interpretoare si compilatoare de Haskell disponibile la http://www.haskell.org/ -> Download.

Apropos: Daca va intereseaza teoria automatelor si limbajelor formale sau metode de transcriere a structurilor de date dintr-un format in altul, Haskell este un instrument excelent. Un translator de la o sintaxa la alta se scrie uimitor de repede, in cateva ore. Ba chiar si un mic limbaj de programare cum este Limbajul Pseudocod Rodin. Dar nu uitati mai inainte sa cititi ceva despre teoria limbajelor formale. Capitolul dedicat gramaticilor de tip 2 (Context Free Grammmars) din ierarhia lui Chomsky in primul rand dar si celelalte lucrari ale lui Noam Chomsky. Apropos de gramaticile lui Chomsky, bibliotecile de combinatori de parsere scrise in Haskell sunt mai puternice decat gramaticile independente de context, deoarece combinatorii de parsere sunt functii cu parametri. De exemplu limbajul "a la n, b la n, c la n" cat si limbajul cuvintelor duplicate pot fi usor acceptate de parsere create folosind combinatorii de parsere. Si sunt si imediat implementabile ca programe in Haskell. (Cititi din bibliografia din rubrica Mini-Biblioteca.)



<= Inapoi la inceputul paginii principale Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.