Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (09-05-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Ramas_de_un_arbol

Description

Los árboles se pueden representar mediante el siguiente tipo de datos

  data Arbol a = N a [Arbol a]
                 deriving Show

Por ejemplo, los árboles

    1               3
   / \             /|\ 
  2  3            / | \
     |           5  4  7
     4           |     /\ 
                 6    2  1

se representan por

  ej1, ej2 :: Arbol Int
  ej1 = N 1 [N 2 [],N 3 [N 4 []]]
  ej2 = N 3 [N 5 [N 6 []], N 4 [], N 7 [N 2 [], N 1 []]

Definir la función

ramas :: Arbol b -> [[b]]

tal que (ramas a) es la lista de las ramas del árbol a. Por ejemplo,

>>> ramas ej1
[[1,2],[1,3,4]]
>>> ramas ej2
[[3,5,6],[3,4],[3,7,2],[3,7,1]]

Synopsis

Documentation

data Arbol a Source #

Tipo de los árboles.

Constructors

N a [Arbol a] 

Instances

Show a => Show (Arbol a) Source # 

Methods

showsPrec :: Int -> Arbol a -> ShowS #

show :: Arbol a -> String #

showList :: [Arbol a] -> ShowS #

Arbitrary a => Arbitrary (Arbol a) Source #

Incluye los árboles en Arbitrary.

Methods

arbitrary :: Gen (Arbol a) #

shrink :: Arbol a -> [Arbol a] #

ej1 :: Arbol Int Source #

Ejemplo de árbol.

ej2 :: Arbol Int Source #

Ejemplo de árbol.

ramas :: Arbol b -> [[b]] Source #

1ª solución (por recursión y comprensión).

ramas2 :: Arbol b -> [[b]] Source #

2ª solución (por recursión con map y concat).

ramas3 :: Arbol b -> [[b]] Source #

3ª solución (por recursión con concatMap).

ramas4 :: Arbol b -> [[b]] Source #

4ª solución (por recursión con concatMap y .

ramas5 :: Arbol a -> [[a]] Source #

5ª solución (por recursión con map y >>=

gen_Arbol :: Arbitrary a => Int -> Gen (Arbol a) Source #

Generador de árboles.

> sample ((gen_Arbol 5) :: Gen (Arbol Int))
N 0 [N 0 []]
N (-2) []
N 4 []
N 2 [N 4 []]
N 8 []
N (-2) [N (-9) [],N 7 []]
N 11 []
N (-11) [N 4 [],N 14 []]
N 10 [N (-3) [],N 13 []]
N 12 [N 11 []]
N 20 [N (-18) [],N (-13) []]

prop_ramas :: Arbol Int -> Bool Source #

Comprueba la equivalencia de las definiciones de ramas.

>>> quickCheck prop_ramas
+++ OK, passed 100 tests.