Haskell si Automate
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 :
. Prezentarea proiectului[edit]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. Haskell si Automate[edit]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
--}
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. |