Define una función roman2int :: String -> Int que
convierta un número romano en su entero equivalente usando
recursividad.
Recuerda que los números romanos se escriben con los símbolos
I, V, X, L,
C, D y M, con valores 1, 5, 10,
50, 100, 500 y 1000 respectivamente. En este sistema, para obtener el
número representado, se suman los valores de los símbolos, excepto los
símbolos situados a la izquierda de un símbolo de valor mayor, que se
restan.
Define una función roman2int' :: String -> Int que
hace lo mismo que la función anterior pero sin usar
recursividad: usa una o más funciones de orden superior.
La serie de Taylor para calcular es:
Define una función arrels :: Float -> [Float] que,
dado un real
,
retorna la lista infinita de los términos del desarrollo de Taylor de
.
Escribe una función
arrel :: Float -> Float -> Float que a partir de una
y un
,
aproxime la raíz de
con un error inferior o igual a
utilizando la lista infinita anterior. El error en el término
de la serie (con
)
es la diferencia en valor absoluto entre
y
.
Considera el siguiente tipo genérico LTree a de árboles
binarios con valores en las hojas:
data LTree a = Leaf a Node (LTree a) (LTree a)|
Haz que los árboles sean (“instance”) de la clase Show
visualizándolos según los ejemplos.
Haz una función build :: [a] -> LTree a que, dada una
lista no vacía, construye el LTree equilibrado (a la
izquierda) que contiene los elementos de la lista en el mismo orden de
izquierda a derecha. Decimos que un árbol está equilibrado a la
izquierda si todos los subárboles tienen el hijo izquierdo con la misma
profundidad que el hijo derecho o la misma más
.
Define una función
zipLTrees :: LTree a -> LTree b -> Maybe (LTree (a,b))
que combine los valores de las hojas de dos árboles con la misma
estructura.
Si las estructuras de los dos árboles no encajan, retorna
Nothing y, si encajan, retorna Just del árbol
que tiene en cada hoja el par con el primer elemento del primer árbol y
el segundo del segundo árbol en la misma posición.
Utiliza la notación do.
Input
roman2int "I" roman2int "IV" roman2int "MCCCXIX" roman2int "MMXVIII"
Output
1 4 1319 2018
Input
roman2int' "I" roman2int' "IV" roman2int' "MCCCXIX" roman2int' "MMXVIII"
Output
1 4 1319 2018
Input
take 10 $ arrels 4.0 take 10 $ arrels 100.0
Output
[4.0,2.5,2.05,2.0006099,2.0,2.0,2.0,2.0,2.0,2.0] [100.0,50.5,26.240099,15.02553,10.840435,10.032578,10.000053,10.0,10.0,10.0]
Input
arrel 4.0 0.00001 arrel 100.0 0.1
Output
2.0 10.000053
Input
Node (Leaf 3) (Node (Leaf 8) (Leaf 7)) Node (Leaf 1) (Node (Node (Leaf 3) (Leaf 4)) (Node (Leaf 8) (Leaf 7))) Node (Leaf "Albert") (Node (Leaf "Gerard") (Leaf "Jordi")) Leaf 'x'
Output
<{3},<{8},{7}>>
<{1},<<{3},{4}>,<{8},{7}>>>
<{"Albert"},<{"Gerard"},{"Jordi"}>>
{'x'}
Input
build [3, 2, 5] build [3, 2, 8, 5, 1] build ['a', 'b', 'c', 'd'] build [[1, 2, 3]]
Output
<<{3},{2}>,{5}>
<<<{3},{2}>,{8}>,<{5},{1}>>
<<{'a'},{'b'}>,<{'c'},{'d'}>>
{[1,2,3]}
Input
let t1 = Node (Leaf "a") (Node (Leaf "b") (Leaf "c")) let t2 = Node (Leaf 0) (Node (Leaf 1) (Leaf 2)) let t3 = Node (Node (Leaf 1) (Leaf 2)) (Leaf 0) zipLTrees t1 t2 zipLTrees t1 t3
Output
Just <{("a",0)},<{("b",1)},{("c",2)}>>
Nothing