Difference between revisions of "Monada parserelor"

From HaskellWiki
Jump to navigation Jump to search
m
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
  +
[[Image:Haskelllogo-small-flag-RO-8.jpg|center|Haskell - Un limbaj functional pur - Monade]]
Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel formate cu numerele Reale, de exemplu).
 
  +
[[Category:Ro]]
   
Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>== si return. Ceea ce se face ca mai jos: <br>
 
   
 
Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel - structuri formate cu numerele Reale, de exemplu).
<nowiki>
 
instance Monad Parser where </nowiki> <br> <nowiki>
 
return a = Parser (\cs -> [(a,cs)]) </nowiki> <br> <nowiki>
 
p >>= f = Parser (\cs -> concat [ parse (f a) cs' | (a,cs') <- parse p cs]) </nowiki> <br>
 
   
 
Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>= si return. Ceea ce se face ca mai jos:
dar nu uitati sa indentati ultimele doua randuri. Iar functia parse e definita: <br>
 
  +
<haskell>
 
instance Monad Parser where
 
return a = Parser (\cs -> [(a,cs)])
 
p >>= f = Parser (\cs -> concat [ parse (f a) cs' | (a,cs') <- parse p cs])
  +
</haskell>
 
dar nu uitati sa indentati ultimele doua randuri. Iar functia parse e definita:
  +
<haskell>
 
parse :: Parser a -> String -> [(a,String)]
 
parse (parser p) = p
  +
</haskell>
 
Monada este folosita la realizarea front-end-urilor de interpretoare.
   
 
Aici mai sunt multe de adaugat.
parse :: Parser a -> String -> [(a,String)] <br>
 
parse (parser p) = p <br>
 
   
Monada este folosita la realizarea front-end-urilor de interpretoare.
 
   
  +
----
Aici mai sunt multe de adaugat. Pagina mai trebuie dezvoltata.
 
  +
Pagina indexata la indexul [[Category:Ro]] [http://www.haskell.org/haskellwiki/Category:Ro Categories:Ro]
  +
----
  +
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell. ]<br> <br>
  +
[http://www.haskell.org/haskellwiki/Intrebarile_incepatorului <'''-''' Inapoi la Intrebarile incepatorului Ro/Haskell. ]

Latest revision as of 13:03, 11 October 2008

Haskell - Un limbaj functional pur - Monade


Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel - structuri formate cu numerele Reale, de exemplu).

Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>= si return. Ceea ce se face ca mai jos:

instance Monad Parser where  
  return a = Parser (\cs -> [(a,cs)]) 
  p >>= f  = Parser (\cs -> concat [ parse (f a) cs' | (a,cs') <- parse p cs])

dar nu uitati sa indentati ultimele doua randuri. Iar functia parse e definita:

parse :: Parser a -> String -> [(a,String)] 
parse (parser p) = p

Monada este folosita la realizarea front-end-urilor de interpretoare.

Aici mai sunt multe de adaugat.



Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.