Personal tools

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, search

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