Recorrido de árboles binarios

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir las funciones

tales que

  • preorden es la lista correspondiente al recorrido preorden del árbol x; es decir, primero visita la raíz del árbol, a continuación recorre el subárbol izquierdo y, finalmente, recorre el subárbol derecho. Por ejemplo,

  • postorden x es la lista correspondiente al recorrido postorden del árbol x; es decir, primero recorre el subárbol izquierdo, a continuación el subárbol derecho y, finalmente, la raíz del árbol. Por ejemplo,

Comprobar con QuickCheck que la longitud de la lista obtenida recorriendo un árbol en cualquiera de los sentidos es igual al número de nodos del árbol más el número de hojas.
Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Profundidad de un árbol binario

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir la función

tal que profundidad x es la profundidad del árbol x. Por ejemplo,

Comprobar con QuickCheck que para todo árbol biario x, se tiene que

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Número de hojas de un árbol binario

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir las funciones

tales que

  • (nHojas x) es el número de hojas del árbol x. Por ejemplo,

  • (nNodos x) es el número de nodos del árbol x. Por ejemplo,

Comprobar con QuickCheck que en todo árbol binario el número de sus hojas es igual al número de sus nodos más uno.

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de los árboles binarios

1. El tipo de los árboles binarios en Haskell

El árbol binario

se puede representar por

usando el tipo de los árboles binarios definido como se muestra a continuación.

2. El tipo de los árboles binarios en Python

El árbol binario

se puede representar por

usando la definición de los árboles binarios que se muestra a continuación.

El tipo de las expresiones aritméticas: Número de operaciones en una expresión

Usando el tipo de las expresiones aritméticas, definir la función

tal que numeroOps e es el número de operaciones de e. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las expresiones aritméticas: Valor de la resta

Usando el tipo de las expresiones aritméticas, definir la función

tal que resta e1 e2 es la expresión correspondiente a la diferencia de e1 y e2. Por ejemplo,

Comprobar con QuickCheck que

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las expresiones aritméticas: Valor de una expresión

Usando el tipo de las expresiones aritméticas, definir la función

tal que valor e es el valor de la expresión e (donde el valor de SiCero e e1 e2 es el valor de e1 si el valor de e es cero y el es el valor de e2, en caso contrario). Por ejemplo,


Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las expresiones aritméticas

1. El tipo de las expresiones aritméticas en Haskell

El tipo de las expresiones aritméticas formadas por

  • literales (p.e. Lit 7),
  • sumas (p.e. Suma (Lit 7) (Suma (Lit 3) (Lit 5)))
  • opuestos (p.e. Op (Suma (Op (Lit 7)) (Suma (Lit 3) (Lit 5))))
  • expresiones condicionales (p.e. (SiCero (Lit 3) (Lit 4) (Lit 5))

se define como se muestra a continuación.

2. El tipo de las expresiones aritméticas en Python

El tipo de las expresiones aritméticas formadas por

  • literales (p.e. Lit 7),
  • sumas (p.e. Suma (Lit 7) (Suma (Lit 3) (Lit 5)))
  • opuestos (p.e. Op (Suma (Op (Lit 7)) (Suma (Lit 3) (Lit 5))))
  • expresiones condicionales (p.e. (SiCero (Lit 3) (Lit 4) (Lit 5))

se define como se muestra a continuación.

Árbol con las hojas en la profundidad dada

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir la función

tal que creaArbol n es el árbol cuyas hoyas están en la profundidad n. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Árboles con la misma forma

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir la función

tal que mismaForma t1 t2 se verifica si t1 y t2 tienen la misma estructura. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Aplicación de una función a un árbol

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

Definir la función

tal que mapArbol f t es el árbolo obtenido aplicando la función f a los elementos del árbol t. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

Altura de un árbol binario

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por

data Arbol a = Hoja a
| Nodo (Arbol a) (Arbol a)

Definir la función

tal que altura t es la altura del árbol t. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de los árboles binarios con valores en las hojas

1. El tipo de los árboles binarios con valores en las hojas en Haskell

El árbol binario

se puede representar por

usando el tipo de los árboles binarios con valores en las hojas definido como se muestra a continuación.

2. El tipo de los árboles binarios con valores en las hojas en Python

El árbol binario

se puede representar por

usando el tipo de los árboles binarios con valores en las hojas definido como se muestra a continuación.

El tipo de las fórmulas proposicionales: Reconocedor de tautologías

Una fórmula es una tautología si es verdadera en todas sus interpretaciones. Por ejemplo,

  • (A ∧ B) → A es una tautología
  • A → (A ∧ B) no es una tautología

Usando el tipo de las fórmulas proposicionales definido en el ejercicio anterior, definir la función

tal que esTautologia p se verifica si la fórmula p es una tautología. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las fórmulas proposicionales: Interpretaciones de una fórmula

Usando el tipo de las fórmulas proposicionales definido en el ejercicio anterior, definir la función

tal que interpretaciones p es la lista de las interpretaciones de la fórmula p. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las fórmulas proposicionales: Valor de una fórmula

Una interpretación de una fórmula es una función de sus variables en los booleanos. Por ejemplo, la interpretación que a la variable A le asigna verdadero y a la B falso se puede representar por

El tipo de las intepretaciones de puede definir por

El valor de una fórmula en una interpretación se calcula usando las funciones de verdad de las conectivas que se muestran a continuación

Usando el tipo de las fórmulas proposicionales definido en el ejercicio anterior, definir la función

tal que valor i p es el valor de la fórmula p en la interpretación i. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las fórmulas proposicionales: Variables de una fórmula

Usando el tipo de las fórmulas proposicionales definido en el ejercicio anterior, definir la función

tal que variables p es la lista de las variables de la fórmula p. Por ejemplo,

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell


Soluciones en Python

El tipo de las fórmulas proposicionales

1. El tipo de las fórmulas proposicionales en Haskell

La fórmula A → ⊥ ∧ ¬B se representa por

usando el tipo de las fórmulas proposicionales definido por

1. El tipo de las fórmulas proposicionales en Haskell

La fórmula A → ⊥ ∧ ¬B se representa por

usando el tipo de las fórmulas proposicionales definido por

El tipo de los árboles binarios

El árbol binario

se puede representar por

El tipo de los árboles binarios se puede definir por