<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Relaci%C3%B3n_12</id>
	<title>Relación 12 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Relaci%C3%B3n_12"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;action=history"/>
	<updated>2026-07-21T03:54:05Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;diff=570&amp;oldid=prev</id>
		<title>Elsdomgon en 16:47 26 dic 2021</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;diff=570&amp;oldid=prev"/>
		<updated>2021-12-26T16:47:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;amp;diff=570&amp;amp;oldid=564&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Elsdomgon</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;diff=564&amp;oldid=prev</id>
		<title>Mdelamor: Página creada con «&lt;source lang=&#039;haskell&#039;&gt;  -- I1M 2021-22: Relación 12 (7 de enero de 2022) -- Tipos de datos algebraicos: Árboles binarios. -- Departamento de Ciencias de la Computación…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_12&amp;diff=564&amp;oldid=prev"/>
		<updated>2021-12-19T18:16:45Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;  -- I1M 2021-22: Relación 12 (7 de enero de 2022) -- Tipos de datos algebraicos: Árboles binarios. -- Departamento de Ciencias de la Computación…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- I1M 2021-22: Relación 12 (7 de enero de 2022)&lt;br /&gt;
-- Tipos de datos algebraicos: Árboles binarios.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación se presenta ejercicios sobre árboles binarios&lt;br /&gt;
-- definidos como tipos de datos algebraicos.&lt;br /&gt;
-- &lt;br /&gt;
-- Los ejercicios corresponden al tema 9 que se encuentra en &lt;br /&gt;
--    http://www.cs.us.es/cursos/i1m/temas/tema-9.html&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. En los siguientes ejercicios se trabajará con los árboles&lt;br /&gt;
-- binarios definidos como sigue &lt;br /&gt;
--    data Arbol a = H a&lt;br /&gt;
--                 | N a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Por ejemplo, el árbol&lt;br /&gt;
--         9 &lt;br /&gt;
--        / \&lt;br /&gt;
--       /   \&lt;br /&gt;
--      3     7&lt;br /&gt;
--     / \  &lt;br /&gt;
--    2   4 &lt;br /&gt;
-- se representa por&lt;br /&gt;
--    N 9 (N 3 (H 2) (H 4)) (H 7) &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
data Arbol a = H a&lt;br /&gt;
             | N a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.1. Definir la función&lt;br /&gt;
--    nHojas :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nHojas x) es el número de hojas del árbol x. Por ejemplo,&lt;br /&gt;
--    nHojas (N 9 (N 3 (H 2) (H 4)) (H 7))  ==  3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
nHojas :: Arbol a -&amp;gt; Int&lt;br /&gt;
nHojas = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.2. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    nNodos (N 9 (N 3 (H 2) (H 4)) (H 7))  ==  2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.3. Comprobar con QuickCheck que en todo árbol binario el&lt;br /&gt;
-- número de sus hojas es igual al número de sus nodos más uno.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nHojas :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nHojas x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2.1. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    profundidad (N 9 (N 3 (H 2) (H 4)) (H 7))              ==  2&lt;br /&gt;
--    profundidad (N 9 (N 3 (H 2) (N 1 (H 4) (H 5))) (H 7))  ==  3&lt;br /&gt;
--    profundidad (N 4 (N 5 (H 4) (H 2)) (N 3 (H 7) (H 4)))  ==  2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2.2. Comprobar con QuickCheck que para todo árbol biario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.1. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    preorden (N 9 (N 3 (H 2) (H 4)) (H 7))  ==  [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.2. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol más el número de hojas.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.3. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    postorden (N 9 (N 3 (H 2) (H 4)) (H 7))  ==  [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.4. Definir, usando un acumulador, la función&lt;br /&gt;
--    preordenIt :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preordenIt x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    preordenIt (N 9 (N 3 (H 2) (H 4)) (H 7))  ==  [9,3,2,4,7]&lt;br /&gt;
-- &lt;br /&gt;
-- Nota: No usar (++) en la definición&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
preordenIt :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preordenIt x = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.5. Comprobar con QuickCheck que preordenIt es equivalente&lt;br /&gt;
-- a preorden. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_preordenIt :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_preordenIt x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    espejo (N 9 (N 3 (H 2) (H 4)) (H 7)) == N 9 (H 7) (N 3 (H 4) (H 2))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.1. La función take está definida por&lt;br /&gt;
--    take :: Int -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
--    take 0            = []&lt;br /&gt;
--    take (n+1) []     = []&lt;br /&gt;
--    take (n+1) (x:xs) = x : take n xs&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    takeArbol ::  Int -&amp;gt; Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (takeArbol n t) es el subárbol de t de profundidad n. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--    takeArbol 0 (N 9 (N 3 (H 2) (H 4)) (H 7)) == H 9&lt;br /&gt;
--    takeArbol 1 (N 9 (N 3 (H 2) (H 4)) (H 7)) == N 9 (H 3) (H 7)&lt;br /&gt;
--    takeArbol 2 (N 9 (N 3 (H 2) (H 4)) (H 7)) == N 9 (N 3 (H 2) (H 4)) (H 7)&lt;br /&gt;
--    takeArbol 3 (N 9 (N 3 (H 2) (H 4)) (H 7)) == N 9 (N 3 (H 2) (H 4)) (H 7)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
takeArbol :: Int -&amp;gt; Arbol a -&amp;gt; Arbol a&lt;br /&gt;
takeArbol = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.2. Comprobar con QuickCheck que la profundidad de &lt;br /&gt;
-- (takeArbol n x) es menor o igual que n, para todo número natural n y&lt;br /&gt;
-- todo árbol x. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_takeArbol:: Int -&amp;gt; Arbol Int -&amp;gt; Property&lt;br /&gt;
prop_takeArbol n x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. La función&lt;br /&gt;
--    repeat :: a -&amp;gt; [a]&lt;br /&gt;
-- está definida de forma que (repeat x) es la lista formada por&lt;br /&gt;
-- infinitos elementos x. Por ejemplo,&lt;br /&gt;
--    repeat 3  ==  [3,3,3,3,3,3,3,3,3,3,3,3,3,...&lt;br /&gt;
-- La definición de repeat es&lt;br /&gt;
--    repeat x = xs where xs = x:xs&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    repeatArbol :: a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (repeatArbol x) es es árbol con infinitos nodos x. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    takeArbol 0 (repeatArbol 3) == H 3&lt;br /&gt;
--    takeArbol 1 (repeatArbol 3) == N 3 (H 3) (H 3)&lt;br /&gt;
--    takeArbol 2 (repeatArbol 3) == N 3 (N 3 (H 3) (H 3)) (N 3 (H 3) (H 3))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
repeatArbol :: a -&amp;gt; Arbol a&lt;br /&gt;
repeatArbol x = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. La función &lt;br /&gt;
--    replicate :: Int -&amp;gt; a -&amp;gt; [a]&lt;br /&gt;
-- está definida por &lt;br /&gt;
--    replicate n = take n . repeat&lt;br /&gt;
-- es tal que (replicate n x) es la lista de longitud n cuyos elementos&lt;br /&gt;
-- son x. Por ejemplo,&lt;br /&gt;
--    replicate 3 5  ==  [5,5,5]&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    replicateArbol :: Int -&amp;gt; a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (replicate n x) es el árbol de profundidad n cuyos nodos son&lt;br /&gt;
-- x. Por ejemplo,&lt;br /&gt;
--    replicateArbol 0 5  ==  H 5&lt;br /&gt;
--    replicateArbol 1 5  ==  N 5 (H 5) (H 5)&lt;br /&gt;
--    replicateArbol 2 5  ==  N 5 (N 5 (H 5) (H 5)) (N 5 (H 5) (H 5))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
replicateArbol :: Int -&amp;gt; a -&amp;gt; Arbol a&lt;br /&gt;
replicateArbol n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Comprobar con QuickCheck que el número de hojas de &lt;br /&gt;
-- (replicateArbol n x) es 2^n, para todo número natural n&lt;br /&gt;
--&lt;br /&gt;
-- Nota. Al hacer la comprobación limitar el tamańo de las pruebas como&lt;br /&gt;
-- se indica a continuación&lt;br /&gt;
--    quickCheckWith (stdArgs {maxSize=7}) prop_replicateArbol&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_replicateArbol :: Int -&amp;gt; Int -&amp;gt; Property&lt;br /&gt;
prop_replicateArbol n x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.1. Definir la función&lt;br /&gt;
--    mapArbol :: (a -&amp;gt; a) -&amp;gt; Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (mapArbol f x) es el árbol obtenido aplicándole a cada nodo de&lt;br /&gt;
-- x la función f. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; mapArbol (*2) (N 9 (N 3 (H 2) (H 4)) (H 7)) &lt;br /&gt;
--    N 18 (N 6 (H 4) (H 8)) (H 14)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
mapArbol :: (a -&amp;gt; a) -&amp;gt; Arbol a -&amp;gt; Arbol a&lt;br /&gt;
mapArbol = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.2. Comprobar con QuickCheck que &lt;br /&gt;
--    (mapArbol (1+)) . espejo = espejo . (mapArbol (1+))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_mapArbol_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_mapArbol_espejo x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.3. Comprobar con QuickCheck que&lt;br /&gt;
--    (map (1+)) . preorden = preorden . (mapArbol (1+)) &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_map_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_map_preorden x = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = liftM H arbitrary &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [liftM H arbitrary,&lt;br /&gt;
                             liftM3 N arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
      arbol _       = error &amp;quot;Imposible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
</feed>