El fascinante triángulo de Pascal.

El triángulo de Pascal aparece en diversos contextos, ver:

 https://en.wikipedia.org/wiki/Pascal%27s_triangle

Para ver que la construcción where no sólo es estética, calcular

take 25 (map pasTri [1..])

take 25 (map pasTri2 [1..])

de los programas de abajo y comparar la eficiencia de las versiones...

pasTri es en efecto exponencial,

y pasTri2 es lineal.

pasTri 1 = [1]
pasTri 2 = [1,1]
pasTri n | n>2 = zipWith (+) (pasTri (n-1)++[0]) ([0]++pasTri(n-1))

pasTri2 1 = [1]
pasTri2 2 = [1,1]
pasTri2 n | n>2 = zipWith (+) (ls++[0]) ([0]++ls)
          where
            ls = pasTri2 (n-1)

-- Observar que...
-- [1,1]
--   [1,1]
-- -------
-- [1,2,1]
--   [1,2,1]
-- ---------
-- [1,3,3,1]
--   [1,3,3,1]
-- ------------  
-- [1,4,6,4,1]  
 

Comentarios

Entradas populares de este blog

La entrada y salida en Haskell

OpenGL en Haskell (material opcional)

¡Pi en Haskell!