Cum sa introduc in program combinatorul Y ?

From HaskellWiki
Revision as of 21:21, 28 November 2007 by Ha$kell (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Scrieti pur si simplu ecuatia care descrie comportarea sa.

y f = f (y f)

Apoi puteti folosi combinatorul pentru a scrie solutiile unor ecuatii functionale, obtinute ca puncte fixe ale unei functionale.

De exemplu functia factorial verifica ecuatia:

fac = (\ n -> if (n==0) then 1 else n * fac (n-1))

Considerati-l pe al doilea fac drept prim parametru:

(\f n -> if (n==0) then 1 else n * f(n-1))

Si calculati punctul fix al acestei formule functionale cu ajutorul lui y.

y (\f n -> if (n==0) then 1 else n * f(n-1))

Si gata: Ati obtinut factorialul, functia solutie a ecuatiei anterioare:

fac = y (\f n -> if (n==0) then 1 else n * f (n-1))


Programul complet este:

y f = f (y f)

fac = y (\f n -> if (n==0) then 1 else n * f (n-1))

Iata un alt exemplu, obtinerea inmultirii mult din adunare.

-- Y combinator

y f = f (y f)

multfn = (\ f m n ->  if m==0 then 0 else n + f (m-1) n)

mult = y multfn

Exemplul este inspirat din cursul lui Mike Gordon, Introduction to Functional programming.


<= Inapoi la pagina principala Ro/Haskell