Personal tools

Haskell si Automate

From HaskellWiki

Revision as of 13:14, 6 November 2008 by Ha$kell (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, 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), 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 oct. 2008).


Stirile lunii:Stiri Ro/Haskell

Cuprinsul paginii :


1 . Prezentarea proiectului

Exista deja un veritabil interes pentru Haskell din randul matematicienilor. De altfel daca intrebati pe un forum de discutii care ar fi cel mai bun limbaj pentru matematicieni - uni au intrebat - vi se va raspunde: Haskell.

Legaturile dintre Haskell si Matematica pot fi exploatate pentru a obtine specialisti in matematica aplicata capabili sa realizeze produse informatice bazate pe matematica.

Programul "Ro/Boosting your Math. Faculty with Haskell" isi propune sa mareasca potentialul unei Facultati de matemnatica prin introducerea Haskell-ukui ca limbaj de laborator si semina. (da - ati citit bine, limbaj de laborator la matematica). deja o serie de grupe de matematica - cel putin acolo unde lucreaza subsemnatul - fac or in laboratoarele de informatica.

2 Haskell si Automate

Aveti aici un exemplu, scris la prima strigare, de transpunere a unei pagini de teoria autoamtelor in Haskell. (Dupa o carte de la Cluj a Profesorului Moldovan.)

module DFA where
-- DFA
 
automat = (q, sigma,delta, "q0", f)
 
q = ["q0","q1","q2","q3"]
 
type Stare = String
type Sigma = Char
 
sigma= ["0","1"]
 
delta :: (Stare, Char) -> Stare
delta ("q0",'0') = "q2"
delta ("q0",'1') = "q1"
delta ("q2",'0') = "q0"
delta ("q2",'1') = "q3"
delta ("q1",'0') = "q3"
delta ("q1",'1') = "q0"
delta ("q3",'0') = "q1"
delta ("q3",'1') = "q2"
delta (_,_)  = error "Blocat"
 
-----
-- Stari finale
z :: (Stare) -> Int
z ("q0") = 1
z ("q1") = 0
z ("q2") = 0
z ("q3") = 0
 
f = [ e | e <- q, z(e) == 1]
 
 
-- (s,w)
tr :: (Stare,[Char]) -> (Stare,[Char])
tr  (sf,"") = if (sf `elem` f) then error ("Acceptat-stare finala :"++sf) else error "Neacceptat"
tr  (s, lit:litere) = ( delta (s,lit) , litere)
 
-- Succesiunea configuratiilor in tranzitie
 
w = "1"
cfg 0 = ("q0",w )
cfg 1 = tr (cfg 0 )
cfg n = tr (cfg (n-1) )
 
-- Numerele naturale
naturale :: [Integer]
nat n = [n] ++ (nat (n+1))
naturale = nat 0
 
-- test> map cfg naturale
{--
DFA> w
"1"
DFA> map cfg naturale
[("q0","1"),("q1",""),
Program error: Neacceptat
 
--}


Mult succes si nu uitati: Proiecte practice inseamna bani de la beneficiari. Aici o steluta * merge catre Facultatea de Informatica de la Iasi unde a fost propus ca tema programul de obtinere a automatului minimal. Felicitari echipei de la Iasi.

Intr-adevar, toate teoriile din domeniul limbaje formale si automate care pe vremuri se implementau in Pascal se pot implementa mult mai elegant in Haskell.


Pagina indexata la indexul Categories:Ro


<= Inapoi la inceputul paginii principale Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.