Professional Documents
Culture Documents
3.2
Dada una cantidad de segundos, devuelve la cantidad de horas, minutos y
segundos
equivalente.
-}
{-
Ejercicio 3.3
Incrementa todos los elementos de una tupla de tres enteros.
-}
{-
Ejercicio 3.4
Incrementa todos los elementos de una lista de enteros.
-}
{-
Ejercicio 3.6
Determina si un ao es bisiesto.
-}
{-
Ejercicio 3.7
Resto de forma recursiva utilizando sustracciones.
-}
{-
Ejercicio 3.8
Cociente de forma recursiva utilizando sumas y restas.
-}
{-
Ejercicio 3.9
Funcin recursiva que devuelve el sumatorio desde un valor entero hasta
otro.
-}
{-
Ejercicio 3.10
Funcin recursiva que calcula el producto de los nmeros que hay entre el
primer y segundo argumento, ambos incluidos.
-}
{-
Ejercicio 3.11
Funcin que calcula el nmero de variaciones de n elementos tomados de
m en m.
-}
{-
Ejercicio 3.12
Funcin que calculan nmeros combinatorios.
-}
-- ( m n ) = m! / (m - n)! * n!
combinatorios :: Integer -> Integer -> Integer
combinatorios _ 0 = 1
combinatorios m n
| m == n = 1
| otherwise = div (factorial m) ((factorial (m - n))*(factorial
n))
{-
Ejercicio 3.13
N-simo trmino de la sucesin de Fibonacci.
-}
-- Es ineficiente
fibonacci :: Integer -> Integer
fibonacci 0 = 0
fibonacci 1 = 1
fibonacci(m + 2) = fibonacci m + fibonacci (m + 1)
{-
Ejercicio 3.14
Funciones que devuelven el mayor de dos, tres y cuatro nmeros enteros.
-}
mayor4 :: Integer -> Integer -> Integer -> Integer -> Integer
mayor4 w x y z = mayor (mayor w x) (mayor y z)
{-
Ejercicio 3.15
Funcin que toma tres nmeros enteros y devuelve una terna con los nmeros
en orden creciente.
-}
-- TODO
{-
Ejercicio 3.16
Funcin que determina si un nmero positivo de cuatro cifras es capica
-}
{-
Ejercicio 3.17
Funcin que calcula la suma de las cifras de un nmero natural.
-}
{-
Ejercicio 3.18
Funcin que calcula el nmero de cifras de un nmero natural.
-}
{-
Ejercicio 3.19
Funciones que transforman una lista de dgitos en su correspondiente valor
entero y viceversa.
-}
{-
Ejercicio 4.2
Funcin que calcula la derivada de una funcin de reales en reales en un
punto.
-}
{-
Ejercicio 4.3
FUncin que calcula el logaritmo de un nmero en una base dada, y en base
dos.
-}
{-
Ejercicio 5.4
Operador que aplica una composicin de funciones a un argumento.
-}
infixr 0 >$>
(>$>) :: (a -> a) -> a -> a
(>$>) = \f x -> f (f x)
{-
Ejercicio 5.5
Operador que aplica una composicin de funciones a un argumento.
-}
infixr 9 >.>
f >.> g = \x -> g (f x)
{-
Ejercicio 5.6
Algunas funciones definidas usando la funcin polimrfica 'iter'.
-}
{-
Ejercicio 5.7
Funcin para invertir una lista.
-}
{-
Ejercicio 5.8
-}
twice f x = f (f x)
{-
Ejercicio 5.9
Funcin equivalente a 'zip', empareja dos listas.
-}
{-
Ejercicio 6.1
Tipo de datos que representa temperaturas en grados centgrados y
fahrenheit.
Funcin que comprueba si el agua est congelada a esa temperatura.
-}
{-
Ejercicio 6.2
Definicin del tipo de datos Figura y funcin que calcula el permetro de
una
figura.
-}
{-
Ejercicio 6.3
Definicin de tipos Real, Imaginario, Complejo y Resultado. El tipo
Resultado
almacena las soluciones de una ecuacion de segundo grado.
La funcin 'raices' calcula las races de una ecuacin de segundo grado de
la forma: ax^2 + bx + c = 0
-}
{-
TODO : nmeros real e imaginario...
{-
TODO : raices..
{-
Ejercicio 6.4
Dado el tipo recursivo Nat, algunas operaciones sobre
dicho tipo.
-}
cinco :: Nat
cinco = Suc(Suc(Suc(Suc(Suc Cero))))
dos :: Nat
dos = Suc(Suc Cero)
uno :: Nat
uno = Suc Cero
-- resta
resta :: Nat -> Nat -> Nat
resta Cero _ = Cero
resta x Cero = x
resta (Suc x) (Suc y) = resta x y
-- producto
producto :: Nat -> Nat -> Nat
producto _ Cero = Cero
producto x (Suc y) = suma x (producto x y)
-}
-- potencia
potencia :: Nat -> Nat -> Nat
potencia _ Cero = Suc Cero
potencia Cero _ = Cero
potencia x (Suc Cero) = x
potencia x (Suc y) = producto x (potencia x y)
{-
Ejercicio 6.5
Definir las funciones suma y productoS con la funcin de plegado
foldNat.
-}
{-
suma :: Nat -> Nat -> Nat
suma x Cero = x
suma x (Suc y) = Suc(suma x y)
-}
{-
producto :: Nat -> Nat -> Nat
producto _ Cero = Cero
producto x (Suc y) = suma x (producto x y)
-}
{-
Ejercicio 6.6
Dado el tipo de datos 'Expr', funciones que calculan el nmero
de operadores en una expresin, su valor y el nmero de constantes
que aparecen en dicha expresin.
-}
data Expr = Valor Integer | Expr :+: Expr | Expr :-: Expr | Expr :*: Expr
deriving Show
{-
Ejercicio 6.7
Dado el tipo 'SnocList' que representa listas, definicion de varias
funciones para operar con ellas.
-}
infixl 5 :<
data SnocList a = Vacia | (SnocList a) :< a deriving Show
l :: SnocList Integer
l = Vacia :< 1 :< 2 :< 3 -- [1,2,3]
-- longitud de la lista
{-
Ejercicio 6.8
Dado el tipo 'ConcatList' que representa listas, definicion de varias
funciones para operar con ellas.
-}
infixl 5 :+-+:
data ConcatList a = V | U a | ConcatList a :+-+: ConcatList a deriving
Show
-- longitud de la lista
{-
Ejercicio 7.1
Tipo para representar nmeros racionales.
-}
infix 9 :/
data Racional = Integer :/ Integer
{-
Ejercicio 7.2
Hacer el tipo 'Nat' (definido ms arriba) instancia de Eq, Ord y Num.
-}
{-
Ejercicio 7.3
Hacer los tipos 'SnocList' y 'ConcatList' (definidos ms arriba)
instancias
de Functor. Functor generaliza el comportamiento de 'map' para listas.
-}
{-
Ejercicio 7.4
Clase para medir valores de diferentes tipos.
-}
{- TODO :
instance Medible ??? where
tamano [] = 0
tamano (x:xs) = tamano x + tamano xs
-}
{-
Ejercicio 7.5
Funcin ocurrencias, que toma un elemento y una lista y devuelve
el nmero de ocurrencias del elemento en la lista.
-}
{-
Ejercicio 8.1
Operaciones sobre listas.
-}
{-
Ejercicio 8.2
Comprueba si una lista est ordenada ascendentemente.
-}
{-
Ejercicio 8.3
Insercin ordenada, ordenacin por insercin.
-}
{-
-- ordena una lista por el mtodo de ordenacin por insercin
foldrins :: Ord a => (a -> [a] -> [a]) -> [a] -> [a]
foldrins _ [] = []
foldrins f (x:xs) = f x (foldrins f xs)
{-
Ejercicio 8.4
Operaciones sobre listas.
-}
{-
Ejercicio 8.5
Definicin de algunas funciones predefinidas para listas.
-}
{-
TODO
'head': devuelve el primer elemento de la lista
'tail': devuelve todo excepto el primer elemento de la lista
'last': devuelve el ltimo elemento de la lista
'init': devuelve todo excepto el ltimo elemento de la lista
'take': devuelve una lista con los primeros x elementos que
se le pasan com parmetro
'drop': devuelve una lista resultante de eliminar los x primeros
elementos
'(!!)': devuelve la cabeza de la lista resultante de hacer un drop
'takeWhile': devuelve una lista con los elementos que cumplan cierta
condicin
'sum': devuelve el resultado de sumar todos los elementos de la lista
'product': devuelve el resultado de multiplicar todos los elementos de
la lista
'maximum': devuelve el mayor elemento de la lista
'minimum': devuelve el menor elemento de la lista
'zip': dadas dos listas, devuelve una lista con duplas resultantes de
combinar los elementos en posiciones equivalentes en ambas
'unzip': dada una lista de duplas, devuelve una dupla de dos listas
resultante de separar los elementos de las duplas
'zipWith': aplica cierta funcin a los elementos de dos listas tomndolos
de dos en dos
-}
{-
Ejercicio 8.6
Definicin de algunas funciones predefinidas como concreciones
de foldr y foldl.
-}
-- 'length'
length2 :: [a] -> Integer
length2 = foldr (\x xs -> 1 + xs) 0
-- 'map'
-- 'filter p'
-- '(++ ys)'
-- TODO
-- 'concat'
-- 'unzip'
{-
Ejercicio 8.7
Definicin de algunas funciones predefinidas de la biblioteca List.
-}
{-
Ejercicio 8.8
Funciones definidas utilizando listar por compresin.
-}
{-
Ejercicio 8.9
Funciones de desplegado, generan listas en vez de consumirlas.
-}
unfold :: (b -> Bool) -> (b -> a) -> (b -> b) -> b -> [a]
unfold p h t x = fun x
where
fun x
| p x = []
| otherwise = h x : fun (t x)
-- funcin map
{-
Ejercicio 9.1
Ejercicios sobre rboles Binarios.
-}
data ArbolB a = VacioB | NodoB (ArbolB a) a (ArbolB a) deriving Show
{-
Ejercicio 9.2
Considerando un tipo de rbol binario que slo guarda informacin en sus
hojas, algunas funciones para operar con l.
-}
{-
Ejercicio 9.3
Considerando una funcin de plegado sobre ArbolH, definicin de algunas
funciones sobre dicho plegado.
-}
{-
Ejercicio 9.4
Instancias de Functor para rbol binarios y generales
usando las funciones de plegado.
-}
-- rbol general
{-
Ejercicio 9.5
Funcin 'todos' para rboles binarios y generales utilizando
las funciones de plegado.
-}
-- rbol binario
todosArbolBfold :: (a -> Bool) -> ArbolB a -> Bool
todosArbolBfold p = foldArbolB (\i r d -> i && (p r) && d) True
-- rbol General
{-
Ejercicio 9.6
Instancias de la clase 'TieneMaximo' para rbol general, binario
y rbol H.
-}
-- rbol general
-- rbol binario
{-
Ejercicio 9.7
Instancias de la clase 'Ocurre' para listas y los tres tipos de rboles.
-}
-- rbol general
-- rbol binario
instance Ocurre ArbolB where
ocurre x VacioB = 0
ocurre x (NodoB i r d)
| x == r = 1 + (ocurre x i) + (ocurre x d)
| otherwise = (ocurre x i) + (ocurre x d)
{-
Ejercicio 9.8
Instancias de la clase 'Hoja' para los tres tipos de rboles.
-}
-- rbol general
{-
Ejercicio 9.9
Funcin que elimina un dato de un rbol AVL, de forma que el rbol
siga siendo AVL.
-}