Número a partir de sus dígitos
Definir la función
listaNumero :: [Integer] -> Integer
tal que listaNumero xs
es el número formado por los dígitos xs
. Por ejemplo,
listaNumero [5] == 5 listaNumero [1,3,4,7] == 1347 listaNumero [0,0,1] == 1
Definir la función
listaNumero :: [Integer] -> Integer
tal que listaNumero xs
es el número formado por los dígitos xs
. Por ejemplo,
listaNumero [5] == 5 listaNumero [1,3,4,7] == 1347 listaNumero [0,0,1] == 1
Definir la función
sumaDigitos :: Integer -> Integer
tal que sumaDigitos n
es la suma de los dígitos de n
. Por ejemplo,
sumaDigitos 3 == 3 sumaDigitos 2454 == 15 sumaDigitos 20045 == 11
Definir la función
digitos :: Integer -> [Int]
tal que digitos n
es la lista de los dígitos del número n
. Por ejemplo,
digitos 320274 == [3,2,0,2,7,4]
Dados dos números naturales, a y b, es posible calcular su máximo común divisor mediante el Algoritmo de Euclides. Este algoritmo se puede resumir en la siguiente fórmula:
mcd(a,b) = a, si b = 0 = mcd (b, a módulo b), si b > 0
Definir la función
mcd :: Integer -> Integer -> Integer
tal que mcd a b
es el máximo común divisor de a
y b
calculado mediante el algoritmo de Euclides. Por ejemplo,
mcd 30 45 == 15 mcd 45 30 == 15
Comprobar con QuickCheck que el máximo común divisor de dos números a
y b
(ambos mayores que 0) es siempre mayor o igual que 1 y además es menor o igual que el menor de los números a
y b
.
Definir la función
potencia :: Integer -> Integer -> Integer
tal que potencia x n
es x
elevado al número natural n
. Por ejemplo,
potencia 2 3 == 8
Las bases de datos sobre actividades de personas pueden representarse mediante listas de elementos de la forma (a,b,c,d), donde a es el nombre de la persona, b su actividad, c su fecha de nacimiento y d la de su fallecimiento. Un ejemplo es la siguiente que usaremos a lo largo de este ejercicio,
personas :: [(String,String,Int,Int)] personas = [("Cervantes","Literatura",1547,1616), ("Velazquez","Pintura",1599,1660), ("Picasso","Pintura",1881,1973), ("Beethoven","Musica",1770,1823), ("Poincare","Ciencia",1854,1912), ("Quevedo","Literatura",1580,1654), ("Goya","Pintura",1746,1828), ("Einstein","Ciencia",1879,1955), ("Mozart","Musica",1756,1791), ("Botticelli","Pintura",1445,1510), ("Borromini","Arquitectura",1599,1667), ("Bach","Musica",1685,1750)]
Definir las funciones
nombres :: [(String,String,Int,Int)] -> [String] musicos :: [(String,String,Int,Int)] -> [String] seleccion :: [(String,String,Int,Int)] -> String -> [String] musicos' :: [(String,String,Int,Int)] -> [String] vivas :: [(String,String,Int,Int)] -> Int -> [String]
tales que
nombres bd
es la lista de los nombres de las personas de la base de datos bd
. Por ejemplo,λ> nombres personas ["Cervantes","Velazquez","Picasso","Beethoven","Poincare", "Quevedo","Goya","Einstein","Mozart","Botticelli","Borromini", "Bach"]
musicos bd
es la lista de los nombres de los músicos de la base de datos bd
. Por ejemplo,musicos personas == ["Beethoven","Mozart","Bach"]
seleccion bd m
es la lista de los nombres de las personas de la base de datos bd
cuya actividad es m
. Por ejemplo,λ> seleccion personas "Pintura" ["Velazquez","Picasso","Goya","Botticelli"] λ> seleccion personas "Musica" ["Beethoven","Mozart","Bach"]
musicos' bd
es la lista de los nombres de los músicos de la base de datos bd
. Por ejemplo,musicos' personas == ["Beethoven","Mozart","Bach"]
vivas bd a
es la lista de los nombres de las personas de la base de datos bd
que estaban vivas en el año a
. Por ejemplo,λ> vivas personas 1600 ["Cervantes","Velazquez","Quevedo","Borromini"]
Los polinomios pueden representarse de forma dispersa o densa. Por ejemplo, el polinomio \(6x^4-5x^2+4x-7\) se puede representar de forma dispersa por [6,0,-5,4,-7] y de forma densa por [(4,6),(2,-5),(1,4),(0,-7)].
Definir la función
densa :: [Int] -> [(Int,Int)]
tal que densa xs
es la representación densa del polinomio cuya representación dispersa es xs
. Por ejemplo,
densa [6,0,-5,4,-7] == [(4,6),(2,-5),(1,4),(0,-7)] densa [6,0,0,3,0,4] == [(5,6),(2,3),(0,4)] densa [0] == [(0,0)]
Definir la función
sumaConsecutivos :: [Integer] -> [Integer]
tal que sumaConsecutivos xs
es la suma de los pares de elementos consecutivos de la lista xs. Por ejemplo,
sumaConsecutivos [3,1,5,2] == [4,6,7] sumaConsecutivos [3] == [] last (sumaConsecutivos [1..10^8]) == 199999999
El producto escalar de dos listas de enteros xs y ys de longitud n viene dado por la suma de los productos de los elementos correspondientes.
Definir la función
productoEscalar :: [Integer] -> [Integer] -> Integer
tal que productoEscalar xs ys
es el producto escalar de las listas xs
e ys
. Por ejemplo,
productoEscalar [1,2,3] [4,5,6] == 32
Una terna pitagórica es una terna de números naturales (a,b,c) tal que a<b<c y a²+b²=c². Por ejemplo (3,4,5) es una terna pitagórica.
Definir la función
ternasPitagoricas :: Integer -> [(Integer,Integer,Integer)]
tal que ternasPitagoricas x
es la lista de las ternas pitagóricas cuya suma es x
. Por ejemplo,
ternasPitagoricas 12 == [(3,4,5)] ternasPitagoricas 60 == [(10,24,26),(15,20,25)] ternasPitagoricas (10^6) == [(218750,360000,421250),(200000,375000,425000)]