triangulo sirve que pascales para historia hasta ejercicios ejemplos con binomios algoritmo haskell lazy-evaluation

haskell - sirve - triangulo de pascal hasta el 20



¿Cuánto del triángulo de Pascal evalúa esto? (1)

Sí, solo se evalúan los elementos necesarios para calcular el elemento en cuestión.

GHCi ofrece los comandos :sprint y :print debugging que pueden proporcionarle información sobre qué partes de un valor ya se han evaluado.

En este ejemplo:

GHCi> :sprint pascal pascal = _

(Esto se debe a que no se ha evaluado nada en este momento y los thunks se muestran como _ ).

GHCi> pascal !! 5 !! 5 1

(No estoy usando 50 porque este ejemplo sería demasiado largo).

GHCi> :sprint pascal pascal = [1] : [_,1] : [_,_,1] : [_,_,_,1] : [_,_,_,_,1] : (_ : _ : _ : _ : _ : 1 : _) : _

Ahora tienes una idea bastante clara de qué partes se han examinado.

Probemos uno más:

GHCi> pascal !! 5 !! 4 5 GHCi> :sprint pascal pascal = [1] : [1,1] : [_,2,1] : [_,_,3,1] : [_,_,_,4,1] : (_ : _ : _ : _ : 5 : 1 : _) : _

Y otro:

GHCi> pascal !! 10 !! 5 252 GHCi> :sprint pascal pascal = [1] : [1,1] : [1,2,1] : [1,3,3,1] : [1,4,6,4,1] : (1 : 5 : 10 : 10 : 5 : 1 : _) : (_ : 6 : 15 : 20 : 15 : 6 : _) : (_ : _ : 21 : 35 : 35 : 21 : _) : (_ : _ : _ : 56 : 70 : 56 : _) : (_ : _ : _ : _ : 126 : 126 : _) : (_ : _ : _ : _ : _ : 252 : _) : _

Si tengo esta constante pascal definida como

pascal :: [[Int]] pascal = iterate newrow [1] where newrow = (zipWith (+) <*> tail) . ([0]++) . (++[0])

Y evalúo pascal !! 50 !! 50 pascal !! 50 !! 50 pascal !! 50 !! 50 en GHCI, ¿cuánto del triángulo evalúa esto? ¿Esa pereza significa que solo se calculan los valores necesarios (más un montón de thunks)?