Personal tools

Ce inseamna until in Haskell ?

From HaskellWiki

Revision as of 20:49, 28 November 2007 by Ha$kell (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

In limbajul functional Haskell until este bineinteles ... o functie !

Are trei argumente:

- un predicat care spune cand se termina calculele. Tipul sau este a-> Bool
- o functie care are argumentul de acelasi tip cu rezultatul. Adica a-> a
- o valoare de acel tip, cu care sa inceapa calculele. Adica tipul a.

Ce rezultat obtine ? Aplica functia pe argumentul initial si iar o aplica pe rezultat si iar o aplica pe rezultat ... Pina cand ? Conditia de oprire este data de predicat.


Exemplul 1:Calculul factorialului in stilul programarii imperative

Functia until Poate fi folosita pentru a programa in stil imperativ. Aveti insa grija sa transmiteti toate valorile de la o iteratie la alta a "buclei".:)

fac n = result (for init next done)
        where init = (0,1)
              next   (i,m) = (i+1, m * (i+1))
              done   (i,_) = i==n
              result (_,m) = m
 
for i n d = '''until''' d n i

Exemplul 2:Calculul factorialului cu until procesand perechi (n, n!)

Bineinteles perechea initiala este (1,1) iar din cea finala extrage cu snd al doilea element.Pentru oprire il testam pe primul, scos cu fst din pereche.

fac n = snd (until ((>n) . fst) (\(i,m) -> (i+1, i*m)) (1,1))

Ambele exemple sunt alese din pagina scrisa de Fritz Ruehr de la Willamette. University. Continutul nu are conditii de distribuire deci l-am considerat de domeniu public. Nu l-am reprodus integral, am ales pentru ilustrarea unei idei doar aceste mici exemple. Originalul este la: <http://www.willamette.edu/~fruehr/haskell/evolution.html>


<= Inapoi la pagina principala Ro/Haskell