<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/WIKIS/I1M2021G2/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Critorseb</id>
	<title>Informática de 1º de Matemáticas [Curso 2021-22, Grupo 2] - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/WIKIS/I1M2021G2/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Critorseb"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php/Especial:Contribuciones/Critorseb"/>
	<updated>2026-07-18T10:11:57Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_3&amp;diff=310</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_3&amp;diff=310"/>
		<updated>2021-10-26T18:06:12Z</updated>

		<summary type="html">&lt;p&gt;Critorseb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- I1M 2021-22: Rel_3.hs (20 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión&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 presentan ejercicios con definiciones por&lt;br /&gt;
-- comprensión correspondientes al tema 5 que se encuentra&lt;br /&gt;
--    http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-5.html&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir, por comprensión, la función &lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer &lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + n^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
sumaDeCuadrados :: Integer -&amp;gt; Integer &lt;br /&gt;
sumaDeCuadrados n = sum [(x^2) | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir por comprensión la función &lt;br /&gt;
--    replica :: Int -&amp;gt; a -&amp;gt; [a]&lt;br /&gt;
-- tal que (replica n x) es la lista formada por n copias del elemento&lt;br /&gt;
-- x. Por ejemplo,  &lt;br /&gt;
--    replica 4 7     ==  [7,7,7,7]&lt;br /&gt;
--    replica 3 True  ==  [True, True, True]&lt;br /&gt;
-- Nota: La función replica es equivalente a la predefinida replicate.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
replica :: Int -&amp;gt; a -&amp;gt; [a]&lt;br /&gt;
replica n x = [x | _ &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.1. Definir la función &lt;br /&gt;
--    suma :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal (suma n) es la suma de los n primeros números. Por ejemplo,&lt;br /&gt;
--    suma 3  ==  6&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
suma :: Integer -&amp;gt; Integer&lt;br /&gt;
suma n = sum [1..n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.2. Los triángulos aritméticos se forman como sigue&lt;br /&gt;
--     1&lt;br /&gt;
--     2  3&lt;br /&gt;
--     4  5  6&lt;br /&gt;
--     7  8  9 10&lt;br /&gt;
--    11 12 13 14 15&lt;br /&gt;
--    16 17 18 19 20 21&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (linea n) es la línea n-ésima de los triángulos&lt;br /&gt;
-- aritméticos. Por ejemplo,  &lt;br /&gt;
--    linea 4  ==  [7,8,9,10]&lt;br /&gt;
--    linea 5  ==  [11,12,13,14,15]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea n = [(1 + sum [1..n-1])..(1 + sum [1..n-1])+(n-1)]&lt;br /&gt;
-- cada primer elemento de cada fila sigue la siguiente sucesión:&lt;br /&gt;
-- F1 : 1  = 1&lt;br /&gt;
-- F2 : 1 + 1 = 2&lt;br /&gt;
-- F3 : 1 + 1 + 2 = 4&lt;br /&gt;
-- F4 : 1 + 1 + 2 + 3 = 7&lt;br /&gt;
-- F5 : 1 + 1 + 2 + 3 + 4 = 11&lt;br /&gt;
-- ...&lt;br /&gt;
-- Además, la Fila n tiene n elementos (Ej. la fila 3 es [4,5,6], tiene 3 elementos)&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández. Lucía González&lt;br /&gt;
linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea n = [x | x&amp;lt;-[suma(n-1) +1..suma n]]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Ana Sosa Caballero, Elsa Domínguez, Cristina Torres&lt;br /&gt;
linea1 :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea1 n = [suma (n-1)+1..suma n]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.3. Definir la función &lt;br /&gt;
--    triangulo :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
-- tal que (triangulo n) es el triángulo aritmético de altura n. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    triangulo 3  ==  [[1],[2,3],[4,5,6]]&lt;br /&gt;
--    triangulo 4  ==  [[1],[2,3],[4,5,6],[7,8,9,10]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Cristina Torres&lt;br /&gt;
triangulo :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
triangulo n = [linea x | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir por comprensión la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo,  &lt;br /&gt;
--    perfectos 500  ==  [6,28,496]&lt;br /&gt;
-- Indicación: Usar la función factores del tema 5.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n-1], mod n x == 0]&lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x&amp;lt;- [1..n], x == sum (factores x)]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
factores1 :: Int -&amp;gt; [Int]&lt;br /&gt;
factores1 n = [x | x &amp;lt;- [1..n], n `mod` x == 0]               &lt;br /&gt;
perfectos1 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos1 n = [x | x &amp;lt;- [1..n], sum (factores x) == 2*x]&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
factores2 n = [x | x &amp;lt;- [1..n], rem n x ==0]&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = [i | i &amp;lt;- [1..n], perfecto i]&lt;br /&gt;
perfecto2 x = x == sum (factores x)-x&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
perfectos3 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos3 n = [x | x &amp;lt;- [1..n], sum(init (factores x)) == x]&lt;br /&gt;
&lt;br /&gt;
factores3 n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
--Cristina Torres&lt;br /&gt;
factores4:: Int -&amp;gt; [Int]&lt;br /&gt;
factores4 n= [ x |x &amp;lt;- [1..n] , rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
perfectos4 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos4 n = [i | i &amp;lt;- [1..n], perfecto i]&lt;br /&gt;
      where perfecto x = x == sum (factores x)- x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.1. Un número natural n se denomina abundante si es menor&lt;br /&gt;
-- que la suma de sus divisores propios. Por ejemplo, 12 y 30 son&lt;br /&gt;
-- abundantes pero 5 y 28 no lo son.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (numeroAbundante n) se verifica si n es un número&lt;br /&gt;
-- abundante. Por ejemplo,  &lt;br /&gt;
--    numeroAbundante 5  == False&lt;br /&gt;
--    numeroAbundante 12 == True&lt;br /&gt;
--    numeroAbundante 28 == False&lt;br /&gt;
--    numeroAbundante 30 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Adolfo Sagrera Vivancos&lt;br /&gt;
numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante n = n &amp;lt; (sum (factores n) - n)&lt;br /&gt;
-- Lucía Hernández, Cristina Torres&lt;br /&gt;
numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante n =  n &amp;lt; sum(factores n)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
numeroAbundante2 :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante2 n = sum (factores n) &amp;gt; 2*n&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numeroAbundante3 :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante3 n = sum(init (factores n)) &amp;gt; n&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.2. Definir la función  &lt;br /&gt;
--    numerosAbundantesMenores :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (numerosAbundantesMenores n) es la lista de números&lt;br /&gt;
-- abundantes menores o iguales que n. Por ejemplo,&lt;br /&gt;
--    numerosAbundantesMenores 50  ==  [12,18,20,24,30,36,40,42,48]&lt;br /&gt;
--    numerosAbundantesMenores 48  ==  [12,18,20,24,30,36,40,42,48]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
numerosAbundantesMenores :: Int -&amp;gt; [Int]&lt;br /&gt;
numerosAbundantesMenores n = [x | x &amp;lt;- [1..n], numeroAbundante x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.3. Definir la función &lt;br /&gt;
--    todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (todosPares n) se verifica si todos los números abundantes&lt;br /&gt;
-- menores o iguales que n son pares. Por ejemplo,&lt;br /&gt;
--    todosPares 10    ==  True&lt;br /&gt;
--    todosPares 100   ==  True&lt;br /&gt;
--    todosPares 1000  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = and [x `rem` 2 == 0 | x &amp;lt;- numerosAbundantesMenores n]&lt;br /&gt;
--Lucía Hernández &lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = [ x| x&amp;lt;-numerosAbundantesMenores n, even x ] == numerosAbundantesMenores n&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = length (filter odd (numerosAbundantesMenores n)) == 0&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
todosPares1 :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares1 n = and [even x | x &amp;lt;- numerosAbundantesMenores n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.4. Definir la constante &lt;br /&gt;
--    primerAbundanteImpar :: Int&lt;br /&gt;
-- que calcule el primer número natural abundante impar. Determinar el&lt;br /&gt;
-- valor de dicho número.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
primerAbundanteImpar :: Int&lt;br /&gt;
primerAbundanteImpar = head [x | x &amp;lt;- [1,3..], numeroAbundante x]&lt;br /&gt;
-- Su cálculo es&lt;br /&gt;
--    ghci&amp;gt; primerAbundanteImpar&lt;br /&gt;
--    945&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
primerAbundanteImpar1 :: Int&lt;br /&gt;
primerAbundanteImpar1 = head [n | n &amp;lt;- [1..], odd n, numeroAbundante n]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6 (Problema 1 del proyecto Euler) Definir la función &lt;br /&gt;
--    euler1 :: Int -&amp;gt; Int&lt;br /&gt;
-- tal que (euler1 n) es la suma de todos los múltiplos de 3 ó 5 menores&lt;br /&gt;
-- que n. Por ejemplo,&lt;br /&gt;
--    euler1 10  ==  23&lt;br /&gt;
-- &lt;br /&gt;
-- Calcular la suma de todos los múltiplos de 3 ó 5 menores que 1000.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [3*x | x &amp;lt;- [1..n] , 3*x &amp;lt; n] + sum [5*x | x &amp;lt;- [1..n], 5*x &amp;lt; n]&lt;br /&gt;
-- Cálculo:&lt;br /&gt;
--    ghci&amp;gt; euler1 1000&lt;br /&gt;
--    266333&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [x |x&amp;lt;-[1..n-1], mod x 5 == 0 || mod x 3 == 0]&lt;br /&gt;
-- Cálculo:λ&amp;gt; euler1 1000&lt;br /&gt;
-- 233168&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
euler1&amp;#039; :: Int -&amp;gt; Int&lt;br /&gt;
euler1&amp;#039; n = sum [x | x &amp;lt;- [1..n-1], multiplo x 3 || multiplo x 5]&lt;br /&gt;
          where multiplo x y = rem x y == 0&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [x | x &amp;lt;- [1..n-1], (rem x 3 == 0) || (rem x 5 == 0)]               &lt;br /&gt;
-- Cálculo:&lt;br /&gt;
-- λ&amp;gt; euler1&amp;#039; 1000&lt;br /&gt;
-- 233168&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Cristina Torres&lt;br /&gt;
&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [ i | i&amp;lt;- [1..n-1], rem i 3==0 ||  rem i 5==0 ]&lt;br /&gt;
-- Cálculo: λ&amp;gt; euler1 1000&lt;br /&gt;
233168&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función &lt;br /&gt;
--    circulo :: Int -&amp;gt; Int&lt;br /&gt;
-- tal que (circulo n) es el la cantidad de pares de números naturales&lt;br /&gt;
-- (x,y) que se encuentran dentro del círculo de radio n. Por ejemplo, &lt;br /&gt;
--    circulo 3  ==  9&lt;br /&gt;
--    circulo 4  ==  15&lt;br /&gt;
--    circulo 5  ==  22&lt;br /&gt;
--    circulo 100  ==  7949&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
circulo :: Int -&amp;gt; Int&lt;br /&gt;
circulo n = length [(x,y) | x &amp;lt;- [0..n], y &amp;lt;- [0..n], x^2 + y^2 &amp;lt; n^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    aproxE :: Double -&amp;gt; [Double]&lt;br /&gt;
-- tal que (aproXE n) es la lista cuyos elementos son los términos de la&lt;br /&gt;
-- sucesión (1+1/m)**m desde 1 hasta n. Por ejemplo, &lt;br /&gt;
--    aproxE 1 == [2.0]&lt;br /&gt;
--    aproxE 4 == [2.0,2.25,2.37037037037037,2.44140625]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
aproxE :: Double -&amp;gt; [Double]&lt;br /&gt;
aproxE n = [(1+1/m)**m | m &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. żCuál es el límite de la sucesión (1+1/m)**m ?&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
-- El límite es el número e.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.3. Definir la función &lt;br /&gt;
--    errorAproxE :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorE x) es el menor número de términos de la sucesión&lt;br /&gt;
-- (1+1/m)**m necesarios para obtener su límite con un error menor que&lt;br /&gt;
-- x. Por ejemplo, &lt;br /&gt;
--    errorAproxE 0.1    ==  13.0&lt;br /&gt;
--    errorAproxE 0.01   ==  135.0&lt;br /&gt;
--    errorAproxE 0.001  ==  1359.0&lt;br /&gt;
-- Indicación: En Haskell, e se calcula como (exp 1).&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
errorAproxE :: Double -&amp;gt; Double&lt;br /&gt;
errorAproxE x = head [m | m &amp;lt;- [1..], (exp 1 - (1+1/m)**m) &amp;lt; x]&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
errorAproxE&amp;#039; :: Double -&amp;gt; Double&lt;br /&gt;
errorAproxE&amp;#039; x = head [m | m &amp;lt;- [1..], abs (exp 1 - (1+1/m)**m) &amp;lt; x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir la función&lt;br /&gt;
--    aproxLimSeno :: Double -&amp;gt; [Double]&lt;br /&gt;
-- tal que (aproxLimSeno n) es la lista cuyos elementos son los términos&lt;br /&gt;
-- de la sucesión  &lt;br /&gt;
--    sen(1/m) &lt;br /&gt;
--    --------&lt;br /&gt;
--      1/m &lt;br /&gt;
-- desde 1 hasta n. Por ejemplo,&lt;br /&gt;
--    aproxLimSeno 1 == [0.8414709848078965]&lt;br /&gt;
--    aproxLimSeno 2 == [0.8414709848078965,0.958851077208406]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
aproxLimSeno :: Double -&amp;gt; [Double]&lt;br /&gt;
aproxLimSeno n = [sin (1/m) / (1/m) | m &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. żCuál es el límite de la sucesión sen(1/m)/(1/m) ?&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
-- El límite es 1. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.3. Definir la función &lt;br /&gt;
--    errorLimSeno :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorLimSeno x) es el menor número de términos de la sucesión &lt;br /&gt;
-- sen(1/m)/(1/m) necesarios para obtener su límite con un error menor&lt;br /&gt;
-- que x. Por ejemplo, &lt;br /&gt;
--    errorLimSeno 0.1     ==   2.0&lt;br /&gt;
--    errorLimSeno 0.01    ==   5.0&lt;br /&gt;
--    errorLimSeno 0.001   ==  13.0&lt;br /&gt;
--    errorLimSeno 0.0001  ==  41.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
errorLimSeno :: Double -&amp;gt; Double&lt;br /&gt;
errorLimSeno x = head [m | m &amp;lt;- [1..], abs (1 - sin (1/m) / (1/m)) &amp;lt; x] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.1. Definir la función &lt;br /&gt;
--    calculaPi :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (calculaPi n) es la aproximación del número pi calculada&lt;br /&gt;
-- mediante la expresión &lt;br /&gt;
--    4*(1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1))&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    calculaPi 3    ==  2.8952380952380956&lt;br /&gt;
--    calculaPi 300  ==  3.1449149035588526&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
calculaPi :: Double -&amp;gt; Double&lt;br /&gt;
calculaPi n = 4*(sum [(-1)**x / (2*x + 1) | x &amp;lt;- [0..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.2. Definir la función &lt;br /&gt;
--    errorPi :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorPi x) es el menor número de términos de la serie&lt;br /&gt;
--    4*(1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1))&lt;br /&gt;
-- necesarios para obtener pi con un error menor que x. Por ejemplo,&lt;br /&gt;
--    errorPi 0.1    ==    9.0&lt;br /&gt;
--    errorPi 0.01   ==   99.0&lt;br /&gt;
--    errorPi 0.001  ==  999.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
errorPi :: Double -&amp;gt; Double&lt;br /&gt;
errorPi x = head [n | n &amp;lt;- [1..], abs (pi - calculaPi n) &amp;lt; x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.1. Una terna (x,y,z) de enteros positivos es pitagórica&lt;br /&gt;
-- si x^2 + y^2 = z^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir, por comprensión, la función &lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int,Int,Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    pitagoricas 10  ==  [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int,Int,Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;-[1..n], y &amp;lt;-[1..n], z &amp;lt;-[1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.2. Definir la función &lt;br /&gt;
--    numeroDePares :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroDePares t) es el número de elementos pares de la terna&lt;br /&gt;
-- t. Por ejemplo,&lt;br /&gt;
--    numeroDePares (3,5,7)  ==  0&lt;br /&gt;
--    numeroDePares (3,6,7)  ==  1&lt;br /&gt;
--    numeroDePares (3,6,4)  ==  2&lt;br /&gt;
--    numeroDePares (4,6,4)  ==  3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Cristina Torres&lt;br /&gt;
numeroDePares :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares (x,y,z) = length [i | i&amp;lt;-[x,y,z], even i]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
numeroDePares1 :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares1 (x,y,z) = sum [1 | a &amp;lt;- [x,y,z], even a]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numeroDePares2 :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares2 (x,y,z) = sum [1 | _ &amp;lt;- filter even [x,y,z]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.3. Definir la función&lt;br /&gt;
--    conjetura :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (conjetura n) se verifica si todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n tiene un número impar de números&lt;br /&gt;
-- pares. Por ejemplo,&lt;br /&gt;
--    conjetura 10  ==  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Cristina Torres&lt;br /&gt;
conjetura :: Int -&amp;gt; Bool&lt;br /&gt;
conjetura n = and [odd (numeroDePares (x,y,z)) | (x,y,z) &amp;lt;- pitagoricas n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.4. Demostrar la conjetura para todas las ternas&lt;br /&gt;
-- pitagóricas. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. (Problema 9 del Proyecto Euler). Una terna pitagórica&lt;br /&gt;
-- es una terna de números naturales (a,b,c) tal que a&amp;lt;b&amp;lt;c y&lt;br /&gt;
-- a^2+b^2=c^2. Por ejemplo (3,4,5) es una terna pitagórica. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    ternasPitagoricas :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
-- tal que (ternasPitagoricas x) es la lista de las ternas pitagóricas&lt;br /&gt;
-- cuya suma es x. Por ejemplo,&lt;br /&gt;
--    ternasPitagoricas 12  ==  [(3,4,5)]&lt;br /&gt;
--    ternasPitagoricas 60  ==  [(10,24,26),(15,20,25)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas x = [(a,b,c) | a &amp;lt;- [1..x], b &amp;lt;- [a+1..x], c &amp;lt;- [b+1..x], a^2 + b^2 == c^2, a+b+c == x]&lt;br /&gt;
--Lucía Hernández,Cristina Torres&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas x = [(a,b,c) | a&amp;lt;-[1..x],b&amp;lt;-[1..x],c&amp;lt;-[1..x],  a&amp;lt;b &amp;amp;&amp;amp; b&amp;lt;c,a^2+b^2 == c^2,a+b+c == x ]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas t =  [ (x,y,z) | x &amp;lt;- [1..], y &amp;lt;- [1..], z &amp;lt;- [1..], x&amp;lt;y &amp;amp;&amp;amp; y&amp;lt;z, x^2+y^2 == z^2, sum [x,y,z] == t]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la constante &lt;br /&gt;
--    euler9 :: Integer&lt;br /&gt;
-- tal que euler9 es producto abc donde (a,b,c) es la única terna&lt;br /&gt;
-- pitagórica tal que a+b+c=1000.  &lt;br /&gt;
--&lt;br /&gt;
-- Calcular el valor de euler9.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
euler9 :: Integer&lt;br /&gt;
euler9 = undefined&lt;br /&gt;
&lt;br /&gt;
-- El cálculo del valor de euler9 es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. El producto escalar de dos listas de enteros xs y ys de&lt;br /&gt;
-- longitud n viene dado por la suma de los productos de los elementos&lt;br /&gt;
-- correspondientes. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir por comprensión la función &lt;br /&gt;
--    productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (productoEscalar xs ys) es el producto escalar de las listas&lt;br /&gt;
-- xs e ys. Por ejemplo,&lt;br /&gt;
--    productoEscalar [1,2,3] [4,5,6]  ==  32&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Ana Sosa Caballero&lt;br /&gt;
productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
productoEscalar xs ys = sum [a*b | (a,b) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
productoEscalar xs ys = sum [ fst p * snd p  |p&amp;lt;- zip xs ys]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Ana Sosa Caballero&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [a+b | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [fst p + snd p  | p&amp;lt;-zip xs (tail xs) ]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Los polinomios pueden representarse de forma dispersa o&lt;br /&gt;
-- densa. Por ejemplo, el polinomio 6x^4-5x^2+4x-7 se puede representar&lt;br /&gt;
-- de forma dispersa por [6,0,-5,4,-7] y de forma densa por&lt;br /&gt;
-- [(4,6),(2,-5),(1,4),(0,-7)].  &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (densa xs) es la representación densa del polinomio cuya&lt;br /&gt;
-- representación dispersa es xs. Por ejemplo, &lt;br /&gt;
--   densa [6,0,-5,4,-7]  ==  [(4,6),(2,-5),(1,4),(0,-7)]&lt;br /&gt;
--   densa [6,0,0,3,0,4]  ==  [(5,6),(2,3),(0,4)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(a,b) | (a,b) &amp;lt;- zip (reverse [0..(length xs-1)]) xs, b /= 0]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero (Mal)&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(y,x) | x &amp;lt;- xs , y &amp;lt;-  [ys, ys-1 .. 0] ]&lt;br /&gt;
      where ys = length xs -1&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(x,y) | (x,y)&amp;lt;- zip (reverse ys) xs, y/=0]&lt;br /&gt;
       where ys = [0.. length xs-1]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.0. La bases de datos sobre actividades de personas pueden&lt;br /&gt;
-- representarse mediante listas de elementos de la forma (a,b,c,d),&lt;br /&gt;
-- donde a es el nombre de la persona, b su actividad, c su fecha de&lt;br /&gt;
-- nacimiento y d la de su fallecimiento. Un ejemplo es la siguiente que&lt;br /&gt;
-- usaremos a lo largo de este ejercicio,&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
personas :: [(String,String,Int,Int)]&lt;br /&gt;
personas = [(&amp;quot;Cervantes&amp;quot;,&amp;quot;Literatura&amp;quot;,1547,1616),&lt;br /&gt;
            (&amp;quot;Velazquez&amp;quot;,&amp;quot;Pintura&amp;quot;,1599,1660),&lt;br /&gt;
            (&amp;quot;Picasso&amp;quot;,&amp;quot;Pintura&amp;quot;,1881,1973),&lt;br /&gt;
            (&amp;quot;Beethoven&amp;quot;,&amp;quot;Musica&amp;quot;,1770,1823),&lt;br /&gt;
            (&amp;quot;Poincare&amp;quot;,&amp;quot;Ciencia&amp;quot;,1854,1912),&lt;br /&gt;
            (&amp;quot;Quevedo&amp;quot;,&amp;quot;Literatura&amp;quot;,1580,1654),&lt;br /&gt;
            (&amp;quot;Goya&amp;quot;,&amp;quot;Pintura&amp;quot;,1746,1828),&lt;br /&gt;
            (&amp;quot;Einstein&amp;quot;,&amp;quot;Ciencia&amp;quot;,1879,1955),&lt;br /&gt;
            (&amp;quot;Mozart&amp;quot;,&amp;quot;Musica&amp;quot;,1756,1791),&lt;br /&gt;
            (&amp;quot;Botticelli&amp;quot;,&amp;quot;Pintura&amp;quot;,1445,1510),&lt;br /&gt;
            (&amp;quot;Borromini&amp;quot;,&amp;quot;Arquitectura&amp;quot;,1599,1667),&lt;br /&gt;
            (&amp;quot;Bach&amp;quot;,&amp;quot;Musica&amp;quot;,1685,1750)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.1. Definir la función&lt;br /&gt;
--    nombres :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (nombres bd) es la lista de los nombres de las personas de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; nombres personas&lt;br /&gt;
--     [&amp;quot;Cervantes&amp;quot;,&amp;quot;Velazquez&amp;quot;,&amp;quot;Picasso&amp;quot;,&amp;quot;Beethoven&amp;quot;,&amp;quot;Poincare&amp;quot;,&lt;br /&gt;
--      &amp;quot;Quevedo&amp;quot;,&amp;quot;Goya&amp;quot;,&amp;quot;Einstein&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Botticelli&amp;quot;,&amp;quot;Borromini&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
nombres :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
nombres bd = [(a) | (a,_,_,_) &amp;lt;- bd]&lt;br /&gt;
  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.2. Definir la función&lt;br /&gt;
--    musicos :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (musicos bd) es la lista de los nombres de los músicos de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,  &lt;br /&gt;
--    musicos personas  ==  [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
musicos :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
musicos bd = [(a) | (a,b,_,_) &amp;lt;- bd, b == &amp;quot;Musica&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.3. Definir la función &lt;br /&gt;
--    seleccion :: [(String,String,Int,Int)] -&amp;gt; String -&amp;gt; [String]&lt;br /&gt;
-- tal que (seleccion bd m) es la lista de los nombres de las personas&lt;br /&gt;
-- de la base de datos bd cuya actividad es m. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; seleccion personas &amp;quot;Pintura&amp;quot;&lt;br /&gt;
--    [&amp;quot;Velazquez&amp;quot;,&amp;quot;Picasso&amp;quot;,&amp;quot;Goya&amp;quot;,&amp;quot;Botticelli&amp;quot;]&lt;br /&gt;
--    ghci&amp;gt; seleccion personas &amp;quot;Musica&amp;quot;&lt;br /&gt;
--    [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
seleccion :: [(String,String,Int,Int)] -&amp;gt; String -&amp;gt; [String]&lt;br /&gt;
seleccion bd m = [(a) | (a,b,_,_) &amp;lt;- bd, b == m]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.4. Definir, usando el apartado anterior, la función&lt;br /&gt;
--    musicos&amp;#039; :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (musicos&amp;#039; bd) es la lista de los nombres de los músicos de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,   &lt;br /&gt;
--    ghci&amp;gt; musicos&amp;#039; personas&lt;br /&gt;
--    [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
musicos&amp;#039; :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
musicos&amp;#039; bd = seleccion bd &amp;quot;Musica&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.5. Definir la función &lt;br /&gt;
--    vivas :: [(String,String,Int,Int)] -&amp;gt; Int -&amp;gt; [String]&lt;br /&gt;
-- tal que (vivas bd a) es la lista de los nombres de las personas de la&lt;br /&gt;
-- base de datos bd  que estaban vivas en el ańo a. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; vivas personas 1600&lt;br /&gt;
--    [&amp;quot;Cervantes&amp;quot;,&amp;quot;Velazquez&amp;quot;,&amp;quot;Quevedo&amp;quot;,&amp;quot;Borromini&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
vivas :: [(String,String,Int,Int)] -&amp;gt; Int -&amp;gt; [String]&lt;br /&gt;
vivas ps a = [(p) | (p,_,c,d) &amp;lt;- ps, c &amp;lt;= a &amp;amp;&amp;amp; a &amp;lt;= d]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Critorseb</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_3&amp;diff=309</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_3&amp;diff=309"/>
		<updated>2021-10-26T17:09:36Z</updated>

		<summary type="html">&lt;p&gt;Critorseb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- I1M 2021-22: Rel_3.hs (20 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión&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 presentan ejercicios con definiciones por&lt;br /&gt;
-- comprensión correspondientes al tema 5 que se encuentra&lt;br /&gt;
--    http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-5.html&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir, por comprensión, la función &lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer &lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + n^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
sumaDeCuadrados :: Integer -&amp;gt; Integer &lt;br /&gt;
sumaDeCuadrados n = sum [(x^2) | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir por comprensión la función &lt;br /&gt;
--    replica :: Int -&amp;gt; a -&amp;gt; [a]&lt;br /&gt;
-- tal que (replica n x) es la lista formada por n copias del elemento&lt;br /&gt;
-- x. Por ejemplo,  &lt;br /&gt;
--    replica 4 7     ==  [7,7,7,7]&lt;br /&gt;
--    replica 3 True  ==  [True, True, True]&lt;br /&gt;
-- Nota: La función replica es equivalente a la predefinida replicate.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
replica :: Int -&amp;gt; a -&amp;gt; [a]&lt;br /&gt;
replica n x = [x | _ &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.1. Definir la función &lt;br /&gt;
--    suma :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal (suma n) es la suma de los n primeros números. Por ejemplo,&lt;br /&gt;
--    suma 3  ==  6&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Elsa Domínguez, Lucía González, Carmen Blanco, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
suma :: Integer -&amp;gt; Integer&lt;br /&gt;
suma n = sum [1..n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.2. Los triángulos aritméticos se forman como sigue&lt;br /&gt;
--     1&lt;br /&gt;
--     2  3&lt;br /&gt;
--     4  5  6&lt;br /&gt;
--     7  8  9 10&lt;br /&gt;
--    11 12 13 14 15&lt;br /&gt;
--    16 17 18 19 20 21&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (linea n) es la línea n-ésima de los triángulos&lt;br /&gt;
-- aritméticos. Por ejemplo,  &lt;br /&gt;
--    linea 4  ==  [7,8,9,10]&lt;br /&gt;
--    linea 5  ==  [11,12,13,14,15]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea n = [(1 + sum [1..n-1])..(1 + sum [1..n-1])+(n-1)]&lt;br /&gt;
-- cada primer elemento de cada fila sigue la siguiente sucesión:&lt;br /&gt;
-- F1 : 1  = 1&lt;br /&gt;
-- F2 : 1 + 1 = 2&lt;br /&gt;
-- F3 : 1 + 1 + 2 = 4&lt;br /&gt;
-- F4 : 1 + 1 + 2 + 3 = 7&lt;br /&gt;
-- F5 : 1 + 1 + 2 + 3 + 4 = 11&lt;br /&gt;
-- ...&lt;br /&gt;
-- Además, la Fila n tiene n elementos (Ej. la fila 3 es [4,5,6], tiene 3 elementos)&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández. Lucía González&lt;br /&gt;
linea :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea n = [x | x&amp;lt;-[suma(n-1) +1..suma n]]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Ana Sosa Caballero, Elsa Domínguez, Cristina Torres&lt;br /&gt;
linea1 :: Integer -&amp;gt; [Integer]&lt;br /&gt;
linea1 n = [suma (n-1)+1..suma n]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.3. Definir la función &lt;br /&gt;
--    triangulo :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
-- tal que (triangulo n) es el triángulo aritmético de altura n. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    triangulo 3  ==  [[1],[2,3],[4,5,6]]&lt;br /&gt;
--    triangulo 4  ==  [[1],[2,3],[4,5,6],[7,8,9,10]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Cristina Torres&lt;br /&gt;
triangulo :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
triangulo n = [linea x | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir por comprensión la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo,  &lt;br /&gt;
--    perfectos 500  ==  [6,28,496]&lt;br /&gt;
-- Indicación: Usar la función factores del tema 5.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n-1], mod n x == 0]&lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x&amp;lt;- [1..n], x == sum (factores x)]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
factores1 :: Int -&amp;gt; [Int]&lt;br /&gt;
factores1 n = [x | x &amp;lt;- [1..n], n `mod` x == 0]               &lt;br /&gt;
perfectos1 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos1 n = [x | x &amp;lt;- [1..n], sum (factores x) == 2*x]&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
factores2 n = [x | x &amp;lt;- [1..n], rem n x ==0]&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = [i | i &amp;lt;- [1..n], perfecto i]&lt;br /&gt;
perfecto2 x = x == sum (factores x)-x&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
perfectos3 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos3 n = [x | x &amp;lt;- [1..n], sum(init (factores x)) == x]&lt;br /&gt;
&lt;br /&gt;
factores3 n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
--Cristina Torres&lt;br /&gt;
factores4:: Int -&amp;gt; [Int]&lt;br /&gt;
factores4 n= [ x |x &amp;lt;- [1..n] , rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
perfectos4 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos4 n = [i | i &amp;lt;- [1..n], perfecto i]&lt;br /&gt;
      where perfecto x = x == sum (factores x)- x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.1. Un número natural n se denomina abundante si es menor&lt;br /&gt;
-- que la suma de sus divisores propios. Por ejemplo, 12 y 30 son&lt;br /&gt;
-- abundantes pero 5 y 28 no lo son.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (numeroAbundante n) se verifica si n es un número&lt;br /&gt;
-- abundante. Por ejemplo,  &lt;br /&gt;
--    numeroAbundante 5  == False&lt;br /&gt;
--    numeroAbundante 12 == True&lt;br /&gt;
--    numeroAbundante 28 == False&lt;br /&gt;
--    numeroAbundante 30 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Adolfo Sagrera Vivancos&lt;br /&gt;
numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante n = n &amp;lt; (sum (factores n) - n)&lt;br /&gt;
-- Lucía Hernández, Cristina Torres&lt;br /&gt;
numeroAbundante :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante n =  n &amp;lt; sum(factores n)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
numeroAbundante2 :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante2 n = sum (factores n) &amp;gt; 2*n&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numeroAbundante3 :: Int -&amp;gt; Bool&lt;br /&gt;
numeroAbundante3 n = sum(init (factores n)) &amp;gt; n&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.2. Definir la función  &lt;br /&gt;
--    numerosAbundantesMenores :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (numerosAbundantesMenores n) es la lista de números&lt;br /&gt;
-- abundantes menores o iguales que n. Por ejemplo,&lt;br /&gt;
--    numerosAbundantesMenores 50  ==  [12,18,20,24,30,36,40,42,48]&lt;br /&gt;
--    numerosAbundantesMenores 48  ==  [12,18,20,24,30,36,40,42,48]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
numerosAbundantesMenores :: Int -&amp;gt; [Int]&lt;br /&gt;
numerosAbundantesMenores n = [x | x &amp;lt;- [1..n], numeroAbundante x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.3. Definir la función &lt;br /&gt;
--    todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (todosPares n) se verifica si todos los números abundantes&lt;br /&gt;
-- menores o iguales que n son pares. Por ejemplo,&lt;br /&gt;
--    todosPares 10    ==  True&lt;br /&gt;
--    todosPares 100   ==  True&lt;br /&gt;
--    todosPares 1000  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = and [x `rem` 2 == 0 | x &amp;lt;- numerosAbundantesMenores n]&lt;br /&gt;
--Lucía Hernández &lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = [ x| x&amp;lt;-numerosAbundantesMenores n, even x ] == numerosAbundantesMenores n&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
todosPares :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares n = length (filter odd (numerosAbundantesMenores n)) == 0&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
todosPares1 :: Int -&amp;gt; Bool&lt;br /&gt;
todosPares1 n = and [even x | x &amp;lt;- numerosAbundantesMenores n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.4. Definir la constante &lt;br /&gt;
--    primerAbundanteImpar :: Int&lt;br /&gt;
-- que calcule el primer número natural abundante impar. Determinar el&lt;br /&gt;
-- valor de dicho número.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Cristina Torres&lt;br /&gt;
primerAbundanteImpar :: Int&lt;br /&gt;
primerAbundanteImpar = head [x | x &amp;lt;- [1,3..], numeroAbundante x]&lt;br /&gt;
-- Su cálculo es&lt;br /&gt;
--    ghci&amp;gt; primerAbundanteImpar&lt;br /&gt;
--    945&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
primerAbundanteImpar1 :: Int&lt;br /&gt;
primerAbundanteImpar1 = head [n | n &amp;lt;- [1..], odd n, numeroAbundante n]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6 (Problema 1 del proyecto Euler) Definir la función &lt;br /&gt;
--    euler1 :: Int -&amp;gt; Int&lt;br /&gt;
-- tal que (euler1 n) es la suma de todos los múltiplos de 3 ó 5 menores&lt;br /&gt;
-- que n. Por ejemplo,&lt;br /&gt;
--    euler1 10  ==  23&lt;br /&gt;
-- &lt;br /&gt;
-- Calcular la suma de todos los múltiplos de 3 ó 5 menores que 1000.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [3*x | x &amp;lt;- [1..n] , 3*x &amp;lt; n] + sum [5*x | x &amp;lt;- [1..n], 5*x &amp;lt; n]&lt;br /&gt;
-- Cálculo:&lt;br /&gt;
--    ghci&amp;gt; euler1 1000&lt;br /&gt;
--    266333&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [x |x&amp;lt;-[1..n-1], mod x 5 == 0 || mod x 3 == 0]&lt;br /&gt;
-- Cálculo:λ&amp;gt; euler1 1000&lt;br /&gt;
-- 233168&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
euler1&amp;#039; :: Int -&amp;gt; Int&lt;br /&gt;
euler1&amp;#039; n = sum [x | x &amp;lt;- [1..n-1], multiplo x 3 || multiplo x 5]&lt;br /&gt;
          where multiplo x y = rem x y == 0&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [x | x &amp;lt;- [1..n-1], (rem x 3 == 0) || (rem x 5 == 0)]               &lt;br /&gt;
-- Cálculo:&lt;br /&gt;
-- λ&amp;gt; euler1&amp;#039; 1000&lt;br /&gt;
-- 233168&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Cristina Torres&lt;br /&gt;
&lt;br /&gt;
euler1 :: Int -&amp;gt; Int&lt;br /&gt;
euler1 n = sum [ i | i&amp;lt;- [1..n-1], rem i 3==0 ||  rem i 5==0 ]&lt;br /&gt;
-- Cálculo: λ&amp;gt; euler1 1000&lt;br /&gt;
233168&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función &lt;br /&gt;
--    circulo :: Int -&amp;gt; Int&lt;br /&gt;
-- tal que (circulo n) es el la cantidad de pares de números naturales&lt;br /&gt;
-- (x,y) que se encuentran dentro del círculo de radio n. Por ejemplo, &lt;br /&gt;
--    circulo 3  ==  9&lt;br /&gt;
--    circulo 4  ==  15&lt;br /&gt;
--    circulo 5  ==  22&lt;br /&gt;
--    circulo 100  ==  7949&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
circulo :: Int -&amp;gt; Int&lt;br /&gt;
circulo n = length [(x,y) | x &amp;lt;- [0..n], y &amp;lt;- [0..n], x^2 + y^2 &amp;lt; n^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    aproxE :: Double -&amp;gt; [Double]&lt;br /&gt;
-- tal que (aproXE n) es la lista cuyos elementos son los términos de la&lt;br /&gt;
-- sucesión (1+1/m)**m desde 1 hasta n. Por ejemplo, &lt;br /&gt;
--    aproxE 1 == [2.0]&lt;br /&gt;
--    aproxE 4 == [2.0,2.25,2.37037037037037,2.44140625]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano, Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
aproxE :: Double -&amp;gt; [Double]&lt;br /&gt;
aproxE n = [(1+1/m)**m | m &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. żCuál es el límite de la sucesión (1+1/m)**m ?&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
-- El límite es el número e.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.3. Definir la función &lt;br /&gt;
--    errorAproxE :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorE x) es el menor número de términos de la sucesión&lt;br /&gt;
-- (1+1/m)**m necesarios para obtener su límite con un error menor que&lt;br /&gt;
-- x. Por ejemplo, &lt;br /&gt;
--    errorAproxE 0.1    ==  13.0&lt;br /&gt;
--    errorAproxE 0.01   ==  135.0&lt;br /&gt;
--    errorAproxE 0.001  ==  1359.0&lt;br /&gt;
-- Indicación: En Haskell, e se calcula como (exp 1).&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
errorAproxE :: Double -&amp;gt; Double&lt;br /&gt;
errorAproxE x = head [m | m &amp;lt;- [1..], (exp 1 - (1+1/m)**m) &amp;lt; x]&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
errorAproxE&amp;#039; :: Double -&amp;gt; Double&lt;br /&gt;
errorAproxE&amp;#039; x = head [m | m &amp;lt;- [1..], abs (exp 1 - (1+1/m)**m) &amp;lt; x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir la función&lt;br /&gt;
--    aproxLimSeno :: Double -&amp;gt; [Double]&lt;br /&gt;
-- tal que (aproxLimSeno n) es la lista cuyos elementos son los términos&lt;br /&gt;
-- de la sucesión  &lt;br /&gt;
--    sen(1/m) &lt;br /&gt;
--    --------&lt;br /&gt;
--      1/m &lt;br /&gt;
-- desde 1 hasta n. Por ejemplo,&lt;br /&gt;
--    aproxLimSeno 1 == [0.8414709848078965]&lt;br /&gt;
--    aproxLimSeno 2 == [0.8414709848078965,0.958851077208406]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Ana Sosa Caballero, Adolfo Sagrera Vivancos&lt;br /&gt;
aproxLimSeno :: Double -&amp;gt; [Double]&lt;br /&gt;
aproxLimSeno n = [sin (1/m) / (1/m) | m &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. żCuál es el límite de la sucesión sen(1/m)/(1/m) ?&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
-- El límite es 1. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.3. Definir la función &lt;br /&gt;
--    errorLimSeno :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorLimSeno x) es el menor número de términos de la sucesión &lt;br /&gt;
-- sen(1/m)/(1/m) necesarios para obtener su límite con un error menor&lt;br /&gt;
-- que x. Por ejemplo, &lt;br /&gt;
--    errorLimSeno 0.1     ==   2.0&lt;br /&gt;
--    errorLimSeno 0.01    ==   5.0&lt;br /&gt;
--    errorLimSeno 0.001   ==  13.0&lt;br /&gt;
--    errorLimSeno 0.0001  ==  41.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
errorLimSeno :: Double -&amp;gt; Double&lt;br /&gt;
errorLimSeno x = head [m | m &amp;lt;- [1..], abs (1 - sin (1/m) / (1/m)) &amp;lt; x] &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.1. Definir la función &lt;br /&gt;
--    calculaPi :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (calculaPi n) es la aproximación del número pi calculada&lt;br /&gt;
-- mediante la expresión &lt;br /&gt;
--    4*(1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1))&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    calculaPi 3    ==  2.8952380952380956&lt;br /&gt;
--    calculaPi 300  ==  3.1449149035588526&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
calculaPi :: Double -&amp;gt; Double&lt;br /&gt;
calculaPi n = 4*(sum [(-1)**x / (2*x + 1) | x &amp;lt;- [0..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.2. Definir la función &lt;br /&gt;
--    errorPi :: Double -&amp;gt; Double&lt;br /&gt;
-- tal que (errorPi x) es el menor número de términos de la serie&lt;br /&gt;
--    4*(1 - 1/3 + 1/5 - 1/7 + ...+ (-1)**n/(2*n+1))&lt;br /&gt;
-- necesarios para obtener pi con un error menor que x. Por ejemplo,&lt;br /&gt;
--    errorPi 0.1    ==    9.0&lt;br /&gt;
--    errorPi 0.01   ==   99.0&lt;br /&gt;
--    errorPi 0.001  ==  999.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
errorPi :: Double -&amp;gt; Double&lt;br /&gt;
errorPi x = head [n | n &amp;lt;- [1..], abs (pi - calculaPi n) &amp;lt; x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.1. Una terna (x,y,z) de enteros positivos es pitagórica&lt;br /&gt;
-- si x^2 + y^2 = z^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir, por comprensión, la función &lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int,Int,Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    pitagoricas 10  ==  [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez, Ana Sosa Caballero, Adolfo Sagrera Vivancos&lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int,Int,Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;-[1..n], y &amp;lt;-[1..n], z &amp;lt;-[1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.2. Definir la función &lt;br /&gt;
--    numeroDePares :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroDePares t) es el número de elementos pares de la terna&lt;br /&gt;
-- t. Por ejemplo,&lt;br /&gt;
--    numeroDePares (3,5,7)  ==  0&lt;br /&gt;
--    numeroDePares (3,6,7)  ==  1&lt;br /&gt;
--    numeroDePares (3,6,4)  ==  2&lt;br /&gt;
--    numeroDePares (4,6,4)  ==  3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
numeroDePares :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares (x,y,z) = length [i | i&amp;lt;-[x,y,z], even i]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
numeroDePares1 :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares1 (x,y,z) = sum [1 | a &amp;lt;- [x,y,z], even a]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numeroDePares2 :: (Int,Int,Int) -&amp;gt; Int&lt;br /&gt;
numeroDePares2 (x,y,z) = sum [1 | _ &amp;lt;- filter even [x,y,z]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.3. Definir la función&lt;br /&gt;
--    conjetura :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (conjetura n) se verifica si todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n tiene un número impar de números&lt;br /&gt;
-- pares. Por ejemplo,&lt;br /&gt;
--    conjetura 10  ==  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Lucía Hernández&lt;br /&gt;
conjetura :: Int -&amp;gt; Bool&lt;br /&gt;
conjetura n = and [odd (numeroDePares (x,y,z)) | (x,y,z) &amp;lt;- pitagoricas n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.4. Demostrar la conjetura para todas las ternas&lt;br /&gt;
-- pitagóricas. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. (Problema 9 del Proyecto Euler). Una terna pitagórica&lt;br /&gt;
-- es una terna de números naturales (a,b,c) tal que a&amp;lt;b&amp;lt;c y&lt;br /&gt;
-- a^2+b^2=c^2. Por ejemplo (3,4,5) es una terna pitagórica. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    ternasPitagoricas :: Integer -&amp;gt; [[Integer]]&lt;br /&gt;
-- tal que (ternasPitagoricas x) es la lista de las ternas pitagóricas&lt;br /&gt;
-- cuya suma es x. Por ejemplo,&lt;br /&gt;
--    ternasPitagoricas 12  ==  [(3,4,5)]&lt;br /&gt;
--    ternasPitagoricas 60  ==  [(10,24,26),(15,20,25)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas x = [(a,b,c) | a &amp;lt;- [1..x], b &amp;lt;- [a+1..x], c &amp;lt;- [b+1..x], a^2 + b^2 == c^2, a+b+c == x]&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas x = [(a,b,c) | a&amp;lt;-[1..x],b&amp;lt;-[1..x],c&amp;lt;-[1..x],  a&amp;lt;b &amp;amp;&amp;amp; b&amp;lt;c,a^2+b^2 == c^2,a+b+c == x ]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
ternasPitagoricas :: Integer -&amp;gt; [(Integer,Integer,Integer)]&lt;br /&gt;
ternasPitagoricas t =  [ (x,y,z) | x &amp;lt;- [1..], y &amp;lt;- [1..], z &amp;lt;- [1..], x&amp;lt;y &amp;amp;&amp;amp; y&amp;lt;z, x^2+y^2 == z^2, sum [x,y,z] == t]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la constante &lt;br /&gt;
--    euler9 :: Integer&lt;br /&gt;
-- tal que euler9 es producto abc donde (a,b,c) es la única terna&lt;br /&gt;
-- pitagórica tal que a+b+c=1000.  &lt;br /&gt;
--&lt;br /&gt;
-- Calcular el valor de euler9.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
euler9 :: Integer&lt;br /&gt;
euler9 = undefined&lt;br /&gt;
&lt;br /&gt;
-- El cálculo del valor de euler9 es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. El producto escalar de dos listas de enteros xs y ys de&lt;br /&gt;
-- longitud n viene dado por la suma de los productos de los elementos&lt;br /&gt;
-- correspondientes. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir por comprensión la función &lt;br /&gt;
--    productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (productoEscalar xs ys) es el producto escalar de las listas&lt;br /&gt;
-- xs e ys. Por ejemplo,&lt;br /&gt;
--    productoEscalar [1,2,3] [4,5,6]  ==  32&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Ana Sosa Caballero&lt;br /&gt;
productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
productoEscalar xs ys = sum [a*b | (a,b) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
productoEscalar :: [Int] -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
productoEscalar xs ys = sum [ fst p * snd p  |p&amp;lt;- zip xs ys]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Ana Sosa Caballero&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [a+b | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [fst p + snd p  | p&amp;lt;-zip xs (tail xs) ]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Los polinomios pueden representarse de forma dispersa o&lt;br /&gt;
-- densa. Por ejemplo, el polinomio 6x^4-5x^2+4x-7 se puede representar&lt;br /&gt;
-- de forma dispersa por [6,0,-5,4,-7] y de forma densa por&lt;br /&gt;
-- [(4,6),(2,-5),(1,4),(0,-7)].  &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (densa xs) es la representación densa del polinomio cuya&lt;br /&gt;
-- representación dispersa es xs. Por ejemplo, &lt;br /&gt;
--   densa [6,0,-5,4,-7]  ==  [(4,6),(2,-5),(1,4),(0,-7)]&lt;br /&gt;
--   densa [6,0,0,3,0,4]  ==  [(5,6),(2,3),(0,4)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(a,b) | (a,b) &amp;lt;- zip (reverse [0..(length xs-1)]) xs, b /= 0]&lt;br /&gt;
&lt;br /&gt;
-- Ana Sosa Caballero (Mal)&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(y,x) | x &amp;lt;- xs , y &amp;lt;-  [ys, ys-1 .. 0] ]&lt;br /&gt;
      where ys = length xs -1&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
densa :: [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
densa xs = [(x,y) | (x,y)&amp;lt;- zip (reverse ys) xs, y/=0]&lt;br /&gt;
       where ys = [0.. length xs-1]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.0. La bases de datos sobre actividades de personas pueden&lt;br /&gt;
-- representarse mediante listas de elementos de la forma (a,b,c,d),&lt;br /&gt;
-- donde a es el nombre de la persona, b su actividad, c su fecha de&lt;br /&gt;
-- nacimiento y d la de su fallecimiento. Un ejemplo es la siguiente que&lt;br /&gt;
-- usaremos a lo largo de este ejercicio,&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
personas :: [(String,String,Int,Int)]&lt;br /&gt;
personas = [(&amp;quot;Cervantes&amp;quot;,&amp;quot;Literatura&amp;quot;,1547,1616),&lt;br /&gt;
            (&amp;quot;Velazquez&amp;quot;,&amp;quot;Pintura&amp;quot;,1599,1660),&lt;br /&gt;
            (&amp;quot;Picasso&amp;quot;,&amp;quot;Pintura&amp;quot;,1881,1973),&lt;br /&gt;
            (&amp;quot;Beethoven&amp;quot;,&amp;quot;Musica&amp;quot;,1770,1823),&lt;br /&gt;
            (&amp;quot;Poincare&amp;quot;,&amp;quot;Ciencia&amp;quot;,1854,1912),&lt;br /&gt;
            (&amp;quot;Quevedo&amp;quot;,&amp;quot;Literatura&amp;quot;,1580,1654),&lt;br /&gt;
            (&amp;quot;Goya&amp;quot;,&amp;quot;Pintura&amp;quot;,1746,1828),&lt;br /&gt;
            (&amp;quot;Einstein&amp;quot;,&amp;quot;Ciencia&amp;quot;,1879,1955),&lt;br /&gt;
            (&amp;quot;Mozart&amp;quot;,&amp;quot;Musica&amp;quot;,1756,1791),&lt;br /&gt;
            (&amp;quot;Botticelli&amp;quot;,&amp;quot;Pintura&amp;quot;,1445,1510),&lt;br /&gt;
            (&amp;quot;Borromini&amp;quot;,&amp;quot;Arquitectura&amp;quot;,1599,1667),&lt;br /&gt;
            (&amp;quot;Bach&amp;quot;,&amp;quot;Musica&amp;quot;,1685,1750)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.1. Definir la función&lt;br /&gt;
--    nombres :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (nombres bd) es la lista de los nombres de las personas de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; nombres personas&lt;br /&gt;
--     [&amp;quot;Cervantes&amp;quot;,&amp;quot;Velazquez&amp;quot;,&amp;quot;Picasso&amp;quot;,&amp;quot;Beethoven&amp;quot;,&amp;quot;Poincare&amp;quot;,&lt;br /&gt;
--      &amp;quot;Quevedo&amp;quot;,&amp;quot;Goya&amp;quot;,&amp;quot;Einstein&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Botticelli&amp;quot;,&amp;quot;Borromini&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
nombres :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
nombres bd = [(a) | (a,_,_,_) &amp;lt;- bd]&lt;br /&gt;
  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.2. Definir la función&lt;br /&gt;
--    musicos :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (musicos bd) es la lista de los nombres de los músicos de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,  &lt;br /&gt;
--    musicos personas  ==  [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
musicos :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
musicos bd = [(a) | (a,b,_,_) &amp;lt;- bd, b == &amp;quot;Musica&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.3. Definir la función &lt;br /&gt;
--    seleccion :: [(String,String,Int,Int)] -&amp;gt; String -&amp;gt; [String]&lt;br /&gt;
-- tal que (seleccion bd m) es la lista de los nombres de las personas&lt;br /&gt;
-- de la base de datos bd cuya actividad es m. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; seleccion personas &amp;quot;Pintura&amp;quot;&lt;br /&gt;
--    [&amp;quot;Velazquez&amp;quot;,&amp;quot;Picasso&amp;quot;,&amp;quot;Goya&amp;quot;,&amp;quot;Botticelli&amp;quot;]&lt;br /&gt;
--    ghci&amp;gt; seleccion personas &amp;quot;Musica&amp;quot;&lt;br /&gt;
--    [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
seleccion :: [(String,String,Int,Int)] -&amp;gt; String -&amp;gt; [String]&lt;br /&gt;
seleccion bd m = [(a) | (a,b,_,_) &amp;lt;- bd, b == m]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.4. Definir, usando el apartado anterior, la función&lt;br /&gt;
--    musicos&amp;#039; :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
-- tal que (musicos&amp;#039; bd) es la lista de los nombres de los músicos de la&lt;br /&gt;
-- base de datos bd. Por ejemplo,   &lt;br /&gt;
--    ghci&amp;gt; musicos&amp;#039; personas&lt;br /&gt;
--    [&amp;quot;Beethoven&amp;quot;,&amp;quot;Mozart&amp;quot;,&amp;quot;Bach&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
musicos&amp;#039; :: [(String,String,Int,Int)] -&amp;gt; [String]&lt;br /&gt;
musicos&amp;#039; bd = seleccion bd &amp;quot;Musica&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16.5. Definir la función &lt;br /&gt;
--    vivas :: [(String,String,Int,Int)] -&amp;gt; Int -&amp;gt; [String]&lt;br /&gt;
-- tal que (vivas bd a) es la lista de los nombres de las personas de la&lt;br /&gt;
-- base de datos bd  que estaban vivas en el ańo a. Por ejemplo,  &lt;br /&gt;
--    ghci&amp;gt; vivas personas 1600&lt;br /&gt;
--    [&amp;quot;Cervantes&amp;quot;,&amp;quot;Velazquez&amp;quot;,&amp;quot;Quevedo&amp;quot;,&amp;quot;Borromini&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
vivas :: [(String,String,Int,Int)] -&amp;gt; Int -&amp;gt; [String]&lt;br /&gt;
vivas ps a = [(p) | (p,_,c,d) &amp;lt;- ps, c &amp;lt;= a &amp;amp;&amp;amp; a &amp;lt;= d]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Critorseb</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_2&amp;diff=258</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_2&amp;diff=258"/>
		<updated>2021-10-20T18:47:15Z</updated>

		<summary type="html">&lt;p&gt;Critorseb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- I1M 2021-22: Rel_2.hs (08 de octubre de 2021)&lt;br /&gt;
-- Definiciones con condicionales, guardas o patrones.&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 presentan ejercicios con definiciones elementales&lt;br /&gt;
-- (no recursivas) de funciones que usan condicionales, guardas o&lt;br /&gt;
-- patrones. &lt;br /&gt;
--&lt;br /&gt;
-- De forma adicional, se adjuntan ejercicios de repaso para trabajar con&lt;br /&gt;
-- operaciones lógicas sobre valores de verdad (o booleanos), sobre todo&lt;br /&gt;
-- con &amp;amp;&amp;amp;, || y not. &lt;br /&gt;
-- &lt;br /&gt;
-- Estos ejercicios se corresponden con el tema 4 cuyas transparencias&lt;br /&gt;
-- se encuentran en  &lt;br /&gt;
--    http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-4.html&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Esta librería se puede instalar de la siguiente forma:&lt;br /&gt;
-- 1. Abrir cmd (Windows) o Terminal (MacOS y Linux)&lt;br /&gt;
-- 2. Escribir: cabal update&lt;br /&gt;
-- 3. Escribir: cabal install QuickCheck&lt;br /&gt;
&lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función &lt;br /&gt;
--    divisionSegura :: Double -&amp;gt; Double -&amp;gt; Double&lt;br /&gt;
-- tal que (divisionSegura x y) es x/y si y no es cero y 9999 en caso&lt;br /&gt;
-- contrario. Por ejemplo,&lt;br /&gt;
--    divisionSegura 7 2  ==  3.5&lt;br /&gt;
--    divisionSegura 7 0  ==  9999.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Elsa Domínguez,Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Fernando Martínez Ortega, Ángela Pérez Ríos, Irene Ortega Moncayo, Cristina Torres &lt;br /&gt;
divisionSegura :: Double -&amp;gt; Double -&amp;gt; Double&lt;br /&gt;
divisionSegura  x y = if y == 0 then 9999 &lt;br /&gt;
                      else x/y&lt;br /&gt;
-- Laura Arango&lt;br /&gt;
divisionSegura1 :: Double -&amp;gt; Double -&amp;gt; Double&lt;br /&gt;
divisionSegura1 x y | y == 0 = 999&lt;br /&gt;
                    | otherwise = x/y&lt;br /&gt;
-- Alereyvil&lt;br /&gt;
divisionSegura x y | y/=0 = x/y&lt;br /&gt;
                   | y==0 = 9999.0&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función &lt;br /&gt;
--    intercambia :: (a,b) -&amp;gt; (b,a)&lt;br /&gt;
-- tal que (intercambia p)  es el punto obtenido intercambiando las&lt;br /&gt;
-- coordenadas del punto p. Por ejemplo, &lt;br /&gt;
--    intercambia (2,5)  ==  (5,2)&lt;br /&gt;
--    intercambia (5,2)  ==  (2,5)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero,Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Fernando Martínez Ortega, Ángela Pérez Ríos, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
intercambia :: (a,b) -&amp;gt; (b,a)&lt;br /&gt;
intercambia (a,b) = (b,a)&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Elsa Domínguez&lt;br /&gt;
intercambia1 :: (a,b) -&amp;gt; (b,a)&lt;br /&gt;
intercambia1 p = (snd p, fst p)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Comprobar con QuickCheck que la función intercambia es&lt;br /&gt;
-- idempotente; es decir, si se aplica dos veces es lo mismo que no&lt;br /&gt;
-- aplicarla ninguna.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Lucía González, José Manuel García, Fernando Martínez Ortega, Ángela Pérez Ríos, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_intercambia :: (Int,Int) -&amp;gt; Bool&lt;br /&gt;
prop_intercambia (a,b) = intercambia (intercambia (a,b)) == (a,b)&lt;br /&gt;
-- La comprobación es quickCheck prop_intercambia&lt;br /&gt;
+++ OK, passed 100 tests&lt;br /&gt;
--Lucía Hernández, Laura Arango, Elsa Domínguez&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_intercambia1 :: (Int,Int) -&amp;gt; Bool&lt;br /&gt;
prop_intercambia1 p  = intercambia1 (intercambia1 p) == p &lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_intercambia1&lt;br /&gt;
+++OK, passed 100 tests.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. Definir una función &lt;br /&gt;
--    ciclo :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (ciclo xs) es la lista obtenida permutando cíclicamente los&lt;br /&gt;
-- elementos de la lista xs, pasando el último elemento al principio de&lt;br /&gt;
-- la lista. Por ejemplo, &lt;br /&gt;
--    ciclo [2,5,7,9]  == [9,2,5,7]&lt;br /&gt;
--    ciclo []         == []&lt;br /&gt;
--    ciclo [2]        == [2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
ciclo :: [a] -&amp;gt; [a]&lt;br /&gt;
ciclo xs | length xs == 0   = xs&lt;br /&gt;
         | otherwise        = last xs : init xs  &lt;br /&gt;
--Lucía Hernández, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
ciclo1 :: [a] -&amp;gt; [a]&lt;br /&gt;
ciclo1 xs =if length xs == 0 then []&lt;br /&gt;
         else last xs:init xs&lt;br /&gt;
--Laura Arango&lt;br /&gt;
ciclo2 :: [a] -&amp;gt; [a]&lt;br /&gt;
ciclo2 [] = []&lt;br /&gt;
ciclo2 xs = last xs : init xs&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
ciclo3 xs  |length xs == 0 = []&lt;br /&gt;
           |otherwise = last xs:init xs &lt;br /&gt;
-- José Manuel García&lt;br /&gt;
ciclo4 :: [a] -&amp;gt; [a]&lt;br /&gt;
ciclo4 xs = take (length xs) ((drop (length xs - 1) xs) ++ xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Comprobar que la longitud es un invariante de la&lt;br /&gt;
-- función ciclo; es decir, la longitud de (ciclo xs) es la misma que la&lt;br /&gt;
-- de xs.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Elsa Domínguez, Lucía Hernández,Lucía González,Laura Arango, Adolfo Sagrera Vivancos, José Manuel García, Ángela Pérez Ríos, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_ciclo :: [Int] -&amp;gt; Bool &lt;br /&gt;
prop_ciclo xs = length (ciclo xs) == length xs&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_ciclo&lt;br /&gt;
+++OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función &lt;br /&gt;
--    numeroMayor :: (Num a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; a&lt;br /&gt;
-- tal que (numeroMayor x y) es el mayor número de dos cifras que puede&lt;br /&gt;
-- construirse con los dígitos x e y. Por ejemplo,  &lt;br /&gt;
--    numeroMayor 2 5 ==  52&lt;br /&gt;
--    numeroMayor 5 2 ==  52&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Elsa Domínguez, Lucía Hernández, Laura Arango, Irene Ortega Moncayo &lt;br /&gt;
numeroMayor :: (Num a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; a&lt;br /&gt;
numeroMayor x y = if x &amp;gt; y then (x*10 + y) else (y*10+x)&lt;br /&gt;
-- Adolfo Sagrera Vivancos, José Manuel García, Lucía González, Cristina Torres&lt;br /&gt;
numeroMayor1 x y | x&amp;lt;y = (y*10+x)&lt;br /&gt;
                | x&amp;gt;y = (x*10+y)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función &lt;br /&gt;
--    numeroDeRaices :: (Num t, Ord t) =&amp;gt; t -&amp;gt; t -&amp;gt; t -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroDeRaices a b c) es el número de raíces reales de la&lt;br /&gt;
-- ecuación a*x^2 + b*x + c = 0. Por ejemplo,&lt;br /&gt;
--    numeroDeRaices 2 0 3    ==  0&lt;br /&gt;
--    numeroDeRaices 4 4 1    ==  1&lt;br /&gt;
--    numeroDeRaices 5 23 12  ==  2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numeroDeRaices :: (Num t, Ord t) =&amp;gt; t -&amp;gt; t -&amp;gt; t -&amp;gt; Int&lt;br /&gt;
numeroDeRaices a b c | t &amp;lt; 0 = 0&lt;br /&gt;
                     | t == 0 = 1&lt;br /&gt;
                     | otherwise = 2&lt;br /&gt;
                     where t =  b^2 - 4*a*c&lt;br /&gt;
-- Elsa Domínguez, Lucía González, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
numeroDeRaices1 :: (Num t, Ord t) =&amp;gt; t -&amp;gt; t -&amp;gt; t -&amp;gt; Int&lt;br /&gt;
numeroDeRaices1 a b c | b^2-4*a*c &amp;lt; 0   = 0&lt;br /&gt;
                      | b^2-4*a*c == 0  = 1&lt;br /&gt;
                      | otherwise       = 2&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adolfo Sagrera Vivancos, José Manuel García&lt;br /&gt;
numeroDeRaices2 :: (Num t, Ord t) =&amp;gt; t -&amp;gt; t -&amp;gt; t -&amp;gt; Int&lt;br /&gt;
numeroDeRaices2 a b c |(b^2-4*a*c) &amp;gt;0 = 2&lt;br /&gt;
                      |(b^2-4*a*c) == 0 = 1&lt;br /&gt;
                      |otherwise = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función &lt;br /&gt;
--    raices :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; [Double]&lt;br /&gt;
-- tal que (raices a b c) es la lista de las raíces reales de la&lt;br /&gt;
-- ecuación ax^2 + bx + c = 0. Por ejemplo, &lt;br /&gt;
--    raices 1 3 2    ==  [-1.0,-2.0]&lt;br /&gt;
--    raices 1 (-2) 1 ==  [1.0,1.0]&lt;br /&gt;
--    raices 1 0 1    ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
raices :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; [Double]&lt;br /&gt;
raices a b c | b == 0 = []&lt;br /&gt;
             | otherwise = [(-b+t)/2*a, (-b-t)/2*a]&lt;br /&gt;
             where t =  b^2 - 4*a*c&lt;br /&gt;
-- Elsa Domínguez, Laura Arango, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
raices1 :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; [Double]&lt;br /&gt;
raices1 a b c | b^2-4*a*c == 0  = [-b/2*a, -b/2*a]&lt;br /&gt;
              | b^2-4*a*c &amp;lt; 0   = []&lt;br /&gt;
              | b^2-4*a*c &amp;gt; 0   = [(-b+t)/(2*a), (-b-t)/(2*a)]&lt;br /&gt;
              where t = sqrt (b^2-4*a*c)&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
raices2 :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; [Double]&lt;br /&gt;
raices2 a b c |(b^2-4*a*c) &amp;gt;0 =  [(-b+sqrt(b^2-4*a*c))/2*a,(-b-sqrt(b^2-4*a*c))/2*a]&lt;br /&gt;
             |(b^2-4*a*c) == 0 = [-b/2*a, -b/2*a]&lt;br /&gt;
             |otherwise = []&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
raices3 a b c | numeroDeRaices a b c == 0 = []&lt;br /&gt;
             | numeroDeRaices a b c == 1 = [-b/(2*a), -b/(2*a)]&lt;br /&gt;
      | otherwise = [(-b+sqrt(b^2-4*a*c))/(2*a), (-b-sqrt(b^2-4*a*c))/(2*a)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir el operador&lt;br /&gt;
--    (~=) :: (Fractional a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; Bool&lt;br /&gt;
-- tal que (x ~= y) se verifica si x e y son casi iguales; es decir si&lt;br /&gt;
-- el valor absoluto de su diferencia es menor que una milésima. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    12.3457 ~= 12.3459  ==  True&lt;br /&gt;
--    12.3457 ~= 12.3479  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
(~=) :: (Fractional a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; Bool&lt;br /&gt;
x ~= y | abs(x-y) &amp;lt;= 0.001 = True&lt;br /&gt;
       | otherwise = False&lt;br /&gt;
--Lucía Hernández, Laura Arango, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
(~=) :: (Fractional a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; Bool&lt;br /&gt;
x ~= y = if abs(x - y)&amp;lt;0.001 then True&lt;br /&gt;
         else False&lt;br /&gt;
-- Elsa Domínguez, José Manuel García&lt;br /&gt;
(~=) :: (Fractional a, Ord a) =&amp;gt; a -&amp;gt; a -&amp;gt; Bool &lt;br /&gt;
x ~= y = abs (x-y) &amp;lt; 0.001&lt;br /&gt;
-- --------------------------------------------------------------------- &lt;br /&gt;
-- Ejercicio 9. Comprobar con QuickCheck que la suma de las raíces&lt;br /&gt;
-- de la ecuación ax^2 + bx + c = 0 (con a no nulo) es -b/a y su&lt;br /&gt;
-- producto es c/a.&lt;br /&gt;
--&lt;br /&gt;
-- Nota. En la comparación usar ~= en lugar de ==&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
-- La propiedad es &lt;br /&gt;
prop_raices :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; Property&lt;br /&gt;
prop_raices a b c = (a /= 0) &amp;amp;&amp;amp; not (null (raices a b c)) ==&amp;gt; (sum (raices a b c)) ~= (-b/a) &amp;amp;&amp;amp; (product (raices a b c)) ~= (c/a) &lt;br /&gt;
-- La comprobación es quickCheck prop_raices&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. En geometría, la fórmula de Herón, descubierta por&lt;br /&gt;
-- Herón de Alejandría, dice que el área de un triángulo cuyo lados&lt;br /&gt;
-- miden a, b y c es la raíz cuadrada de s(s-a)(s-b)(s-c) donde s es el&lt;br /&gt;
-- semiperímetro &lt;br /&gt;
--    s = (a+b+c)/2&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    area :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; Double &lt;br /&gt;
-- tal que (area a b c) es el área del triángulo de lados a, b y c. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    area 3 4 5  ==  6.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Lucía González, Elsa Domínguez, Adolfo Sagrera Vivancos, José Manuel García,César Fornis, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
area :: Double -&amp;gt; Double -&amp;gt; Double -&amp;gt; Double &lt;br /&gt;
area a b c = sqrt(s*(s-a)*(s-b)*(s-c))&lt;br /&gt;
     where s = (a+b+c)/2&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Los intervalos cerrados se pueden representar mediante&lt;br /&gt;
-- una lista de dos números (el primero es el extremo inferior del&lt;br /&gt;
-- intervalo y el segundo el superior). &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    interseccion :: Ord a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (interseccion i1 i2) es la intersección de los intervalos i1 e&lt;br /&gt;
-- i2. Por ejemplo,&lt;br /&gt;
--    interseccion [] [3,5]     ==  []&lt;br /&gt;
--    interseccion [3,5] []     ==  []&lt;br /&gt;
--    interseccion [2,4] [6,9]  ==  []&lt;br /&gt;
--    interseccion [2,6] [6,9]  ==  [6,6]&lt;br /&gt;
--    interseccion [2,6] [0,9]  ==  [2,6]&lt;br /&gt;
--    interseccion [2,6] [0,4]  ==  [2,4]&lt;br /&gt;
--    interseccion [4,6] [0,4]  ==  [4,4]&lt;br /&gt;
--    interseccion [5,6] [0,4]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
interseccion :: Ord a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
interseccion [] _ = []&lt;br /&gt;
interseccion _ []= []&lt;br /&gt;
interseccion i1 i2  | last i1&amp;lt;head i2 = []&lt;br /&gt;
                    |head i1&amp;gt;last i2 = [] &lt;br /&gt;
                    |otherwise = [maximum [head i1,head i2], minimum [last i1,last i2]]&lt;br /&gt;
--Laura Arango, Elsa Domínguez, César Fornis, Lucía González&lt;br /&gt;
interseccion1 :: Ord a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
interseccion1 i1 i2 | i1==[] || i2==[] || head i1&amp;gt;last i2 || last i1&amp;lt;head i2 = []&lt;br /&gt;
                    | otherwise = [max (head i1)(head i2), min (last i1)(last i2)]&lt;br /&gt;
--José Manuel García, Fernando Martínez Ortega, Irene Ortega Moncayo&lt;br /&gt;
interseccion2 :: Ord a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
interseccion2 i1 i2 | null i1 || null i2 || a &amp;gt; d || b &amp;lt; c = []&lt;br /&gt;
                   | a &amp;lt;= c &amp;amp;&amp;amp; b &amp;lt;= d = [c,b]&lt;br /&gt;
                   | a &amp;gt;= c &amp;amp;&amp;amp; b &amp;lt;= d = [a,b]&lt;br /&gt;
                   | a &amp;gt;= c &amp;amp;&amp;amp; b &amp;gt;= d = [a,d]&lt;br /&gt;
                   | a &amp;lt;= c &amp;amp;&amp;amp; b &amp;gt;= d = [c,d]   &lt;br /&gt;
             where a = head i1&lt;br /&gt;
                   b = last i1&lt;br /&gt;
                   c = head i2&lt;br /&gt;
                   d = last i2&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Cristina Torres&lt;br /&gt;
interseccion3 ::  Ord a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
interseccion3 i1 i2 | null i1 || null i2 || a &amp;gt; d || b &amp;lt; c = []&lt;br /&gt;
                    | otherwise = [max a c, min b d]&lt;br /&gt;
                              where a = head i1&lt;br /&gt;
                                    b = last i1&lt;br /&gt;
                                    c = head i2&lt;br /&gt;
                                    d = last i2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Comprobar con QuickCheck que la intersección de&lt;br /&gt;
-- intervalos es conmutativa.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Laura Arango, Elsa Domínguez, José Manuel García, Lucía González, Adolfo Sagrera Vivancos, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_interseccion :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
prop_interseccion a1 a2 b1 b2 = interseccion [a1,a2] [b1,b2] == interseccion [b1,b2] [a1,a2]  &lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_interseccion&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Los números racionales pueden representarse mediante&lt;br /&gt;
-- pares de números enteros. Por ejemplo, el número 2/5 puede&lt;br /&gt;
-- representarse mediante el par (2,5). &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    formaReducida :: (Int,Int) -&amp;gt; (Int,Int) &lt;br /&gt;
-- tal que (formaReducida x) es la forma reducida del número racional&lt;br /&gt;
-- x. Por ejemplo, &lt;br /&gt;
--    formaReducida (4,10)  ==  (2,5)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, José Manuel García, Lucía González, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
formaReducida :: (Int,Int) -&amp;gt; (Int,Int) &lt;br /&gt;
formaReducida (a,b) = (div a z, div b z)&lt;br /&gt;
                  where z = gcd a b&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
formaReducida1 :: (Int,Int) -&amp;gt; (Int,Int) &lt;br /&gt;
formaReducida1 (a,b) = (s*abs(div a z), abs(div b z)) where z = gcd a b&lt;br /&gt;
                                                           s = signum (a*b)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
formaReducida2 :: (Int,Int) -&amp;gt; (Int,Int) &lt;br /&gt;
formaReducida2 (a,b) | a == 0 &amp;amp;&amp;amp; b == 0  = (0,0)&lt;br /&gt;
                     | otherwise         = (s*abs(div a z), abs(div b z))&lt;br /&gt;
                                         where z = gcd a b&lt;br /&gt;
                                               s = signum (a*b)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Definir la función &lt;br /&gt;
--    sumaRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que (sumaRacional x y) es la suma de los números racionales x e&lt;br /&gt;
-- y, expresada en forma reducida. Por ejemplo, &lt;br /&gt;
--    sumaRacional (2,3) (5,6)  ==  (3,2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
sumaRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
sumaRacional (a,b) (c,d) = if b&amp;lt;d then formaReducida((div s b)*a + c, s)&lt;br /&gt;
                           else formaReducida(a+ (div s d)*c, s)&lt;br /&gt;
                   where s = lcm b d&lt;br /&gt;
-- Elsa Domínguez, José Manuel García, Lucía González, Irene Ortega Moncayo, Cristina Torres&lt;br /&gt;
sumaRacional1 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
sumaRacional1 (a,b) (c,d) = formaReducida (a*d + c*b, b*d)&lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
sumaRacional2 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
sumaRacional2 (a,b) (c,d) = formaReducida ((x), (lcm b d))&lt;br /&gt;
                                         where x= y+ ((div (lcm b d) d)*c)&lt;br /&gt;
                                                where y=  (div(lcm b d) b)*a&lt;br /&gt;
--Adolfo Sagrera Vivancos&lt;br /&gt;
sumaRacional3 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
sumaRacional3 (a,b) (c,d) = formaReducida(((div t b)*a + (div t d)*c), t) where t = lcm b d&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Definir la función &lt;br /&gt;
--    productoRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que (productoRacional x y) es el producto de los números&lt;br /&gt;
-- racionales x e y. Por ejemplo, &lt;br /&gt;
--    productoRacional (2,3) (5,6)  ==  (5,9)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
productoRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
productoRacional (a,b) (c,d) = formaReducida (x,t)&lt;br /&gt;
                             where x = a*c&lt;br /&gt;
                                   t = b*d&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Elsa Domínguez, José Manuel García, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
productoRacional1 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
productoRacional1 (a,b) (c,d) = formaReducida (a*c, b*d)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    cocienteRacional ::  (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que &amp;#039;(cocienteRacional x y)&amp;#039; es el cociente de los números racionales&lt;br /&gt;
-- &amp;#039;x&amp;#039; e &amp;#039;y&amp;#039;. Por ejemplo,&lt;br /&gt;
--    cocienteRacional (2,3) (5,6)  ==  (4,5)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Elsa Domínguez, José Manuel García, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
cocienteRacional ::  (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
cocienteRacional (x1,x2) (y1,y2) = formaReducida (x1*y2, x2*y1)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función &lt;br /&gt;
--    igualdadRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Bool&lt;br /&gt;
-- tal que (igualdadRacional x y) se verifica si los números racionales&lt;br /&gt;
-- x e y son iguales. Por ejemplo, &lt;br /&gt;
--    igualdadRacional (6,9) (10,15)  ==  True&lt;br /&gt;
--    igualdadRacional (6,9) (11,15)  ==  False&lt;br /&gt;
--    igualdadRacional (0,2) (0,-5)   ==  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
igualdadRacional :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Bool&lt;br /&gt;
igualdadRacional (a,b) (c,d) = formaReducida (a,b) == formaReducida (c,d)&lt;br /&gt;
-- Laura Arango&lt;br /&gt;
igualdadRacional1 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Bool&lt;br /&gt;
igualdadRacional1 (a,b) (c,d) = formaReducida (a,b) == formaReducida (c,d)&lt;br /&gt;
                               || (a==0 &amp;amp;&amp;amp; c==0)&lt;br /&gt;
                               || (b==0 &amp;amp;&amp;amp; d==0)&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
igualdadRacional3 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Bool&lt;br /&gt;
igualdadRacional3 (a,b) (c,d) = if (a == 0 &amp;amp;&amp;amp; c == 0) || (b == 0 &amp;amp;&amp;amp; d == 0)&lt;br /&gt;
                                then True&lt;br /&gt;
                                else formaReducida (a,b) == formaReducida (c,d)&lt;br /&gt;
-- César Fornis Catalán&lt;br /&gt;
igualdadRacional4 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Bool&lt;br /&gt;
igualdadRacional4 (a,b) (c,d) = a*d == b*c&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck la propiedad distributiva&lt;br /&gt;
-- del producto racional respecto de la suma.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez, Irene Ortega Moncayo &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_distributiva :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; Property&lt;br /&gt;
prop_distributiva x y z = (fst x * snd x /= 0) &amp;amp;&amp;amp; (fst y * snd y /= 0) &amp;amp;&amp;amp; (fst z * snd z /= 0) ==&amp;gt; &lt;br /&gt;
  igualdadRacional (productoRacional (sumaRacional x y) z) (sumaRacional (productoRacional x z) (productoRacional y z)) &lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_distributiva&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Los números complejos se pueden representar mediante pares de &lt;br /&gt;
-- números reales. Por ejemplo, el número 2+5i se puede representar mediante &lt;br /&gt;
-- el par (2,5).&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lo siguiente significa que el tipo Complejo es lo mismo que decir (Double,Double)&lt;br /&gt;
type Complejo = (Double,Double)&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14.1. Definir la función&lt;br /&gt;
--    sumaComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
-- tal que &amp;#039;(sumaComplejos x y)&amp;#039; es la suma de los números complejos &amp;#039;x&amp;#039; e &amp;#039;y&amp;#039;.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    sumaComplejos (2,3) (5,6)  ==  (7.0,9.0)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Elsa Domínguez, Irene Ortega Moncayo, José Manuel García, Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
sumaComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
sumaComplejos (x1,x2) (y1,y2) = (x1+y1, x2+y2)&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14.2. Definir la función&lt;br /&gt;
--    productoComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
-- tal que &amp;#039;(productoComplejos x y)&amp;#039; es el producto de los números complejos&lt;br /&gt;
-- &amp;#039;x&amp;#039; e &amp;#039;y&amp;#039;. Por ejemplo,&lt;br /&gt;
--    productoComplejos (2,3) (5,6)  ==  (-8.0,27.0)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Elsa Domínguez, José Manuel García, Adolfo Sagrera Vivancos, Irene Ortega Moncayo,  Lucía González&lt;br /&gt;
productoComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
productoComplejos (x1,x2) (y1,y2) = ((x1*y1 - x2*y2),(x2*y1 + x1*y2))&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14.3. Definir la función&lt;br /&gt;
--    cocienteComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
-- tal que &amp;#039;(cocienteComplejos x y)&amp;#039; es el cociente de los números complejos&lt;br /&gt;
-- &amp;#039;x&amp;#039; e &amp;#039;y&amp;#039;. Por ejemplo,&lt;br /&gt;
--    cocienteComplejos (3,2) (1,-2)  ==  (-0.2,1.6)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Laura Arango,  Lucía González, Irene Ortega Moncayo &lt;br /&gt;
cocienteComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
cocienteComplejos (x1,x2) (y1,y2) = (((x1*y1 + x2*y2)/ t), ((x2*y1 - x1*y2)/t))&lt;br /&gt;
                  where t = (y1^2 + y2^2)&lt;br /&gt;
-- Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
cocienteComplejos :: Complejo -&amp;gt; Complejo -&amp;gt; Complejo&lt;br /&gt;
cocienteComplejos (x1,x2) (y1,y2) = (a,b)&lt;br /&gt;
                   where a = fst (productoComplejos (x1,x2) (y1,-y2))/(y1^2 + y2^2)&lt;br /&gt;
                         b = snd (productoComplejos (x1,x2) (y1,-y2))/(y1^2 + y2^2)&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14.4. Definir la función&lt;br /&gt;
--    conjugado :: Complejo -&amp;gt; Complejo&lt;br /&gt;
-- tal que &amp;#039;(conjugado x)&amp;#039; es el conjugado del número complejo &amp;#039;x&amp;#039;. Por&lt;br /&gt;
-- ejemplo,&lt;br /&gt;
--    conjugado (2,3)  ==  (2.0,-3.0)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Elsa Domínguez, Irene Ortega Moncayo,  José Manuel García, Adolfo Sagrera Vivancos,  Lucía González&lt;br /&gt;
conjugado :: Complejo -&amp;gt; Complejo&lt;br /&gt;
conjugado (x1,x2) = (x1, -x2)&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Los rectángulos pueden representarse por sus dimensiones, base&lt;br /&gt;
-- y altura, como un par de números enteros. Por ejemplo, (5,3) representa un&lt;br /&gt;
-- rectángulo de base 5 y altura 3.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    mayorRectangulo :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que &amp;#039;(mayorRectangulo r1 r2)&amp;#039; es el rectángulo de mayor área entre &amp;#039;r1&amp;#039;&lt;br /&gt;
-- y &amp;#039;r2&amp;#039;. Por ejemplo,&lt;br /&gt;
--    mayorRectangulo (4,6) (3,7)  ==  (4,6)&lt;br /&gt;
--    mayorRectangulo (4,6) (3,8)  ==  (4,6)&lt;br /&gt;
--    mayorRectangulo (4,6) (3,9)  ==  (3,9)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
mayorRectangulo :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
mayorRectangulo (x1,y1) (x2,y2) = if t &amp;gt;= p then (x1,y1) else (x2,y2)&lt;br /&gt;
                where t = x1*y1&lt;br /&gt;
                      p = x2*y2&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Elsa Domínguez,  Lucía González, Irene Ortega Moncayo &lt;br /&gt;
mayorRectangulo1 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
mayorRectangulo1 (x1,y1) (x2,y2) = if x1*y1 &amp;gt;= x2*y2 then (x1,y1)&lt;br /&gt;
                                  else (x2,y2)&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
mayorRectangulo2 :: (Int,Int) -&amp;gt; (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
mayorRectangulo2 (x1,y1) (x2,y2) | t &amp;gt; s = (x1, y1)&lt;br /&gt;
                                | s &amp;gt; t = (x2, y2)&lt;br /&gt;
                                | otherwise = (x1, y1)&lt;br /&gt;
                                where t = x1*y1&lt;br /&gt;
                                      s = x2*y2&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    cuadrante :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
-- tal que &amp;#039;(cuadrante p)&amp;#039; es el cuadrante en el que se encuentra el punto &amp;#039;p&amp;#039;.&lt;br /&gt;
-- Si el punto está sobre los ejes el resultado debe ser 0. Por ejemplo,&lt;br /&gt;
--    cuadrante (0,4)    ==  0&lt;br /&gt;
--    cuadrante (-3,0)   ==  0&lt;br /&gt;
--    cuadrante (0,0)    ==  0&lt;br /&gt;
--    cuadrante (3,5)    ==  1&lt;br /&gt;
--    cuadrante (-3,5)   ==  2&lt;br /&gt;
--    cuadrante (-3,-5)  ==  3&lt;br /&gt;
--    cuadrante (3,-5)   ==  4&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
cuadrante :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
cuadrante (x1,x2) | or [x1 == 0, x2 == 0] = 0&lt;br /&gt;
                  | and [x1 &amp;gt; 0, x2 &amp;gt; 0] = 1&lt;br /&gt;
                  | and [x1 &amp;lt; 0, x2 &amp;gt; 0] = 2&lt;br /&gt;
                  | and [x1 &amp;lt; 0, x2 &amp;lt; 0] = 3&lt;br /&gt;
                  | otherwise = 4&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
cuadrante1 :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
cuadrante1 (0,_) = 0&lt;br /&gt;
cuadrante1 (_,0) = 0&lt;br /&gt;
cuadrante1 (x1,x2) | x1&amp;gt;0 &amp;amp;&amp;amp; x2&amp;gt;0 = 1&lt;br /&gt;
                  | x1&amp;lt;0 &amp;amp;&amp;amp; x2&amp;gt;0 = 2&lt;br /&gt;
                  | x1&amp;lt;0 &amp;amp;&amp;amp; x2&amp;lt;0 = 3&lt;br /&gt;
                  | otherwise = 4&lt;br /&gt;
--Laura Arango, Elsa Domínguez, Irene Ortega Moncayo &lt;br /&gt;
cuadrante2 :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
cuadrante2 (x1,x2) | x1&amp;gt;0 &amp;amp;&amp;amp; x2&amp;gt;0 = 1&lt;br /&gt;
                   | x1&amp;lt;0 &amp;amp;&amp;amp; x2&amp;gt;0 = 2&lt;br /&gt;
                   | x1&amp;lt;0 &amp;amp;&amp;amp; x2&amp;lt;0 = 3&lt;br /&gt;
                   | x1&amp;gt;0 &amp;amp;&amp;amp; x2&amp;lt;0 = 4&lt;br /&gt;
                   | otherwise    = 0&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
cuadrante3 :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
cuadrante3 (x1,x2) | x1 == 0 || x2 == 0 = 0&lt;br /&gt;
                  | x1 == 0 &amp;amp;&amp;amp; x2 == 0 = 0&lt;br /&gt;
                  | x1 &amp;gt; 0 &amp;amp;&amp;amp; x2 &amp;gt; 0 = 1&lt;br /&gt;
                  | x1 &amp;lt; 0 &amp;amp;&amp;amp; x2 &amp;gt; 0 = 2&lt;br /&gt;
                  | x1 &amp;lt; 0 &amp;amp;&amp;amp; x2 &amp;lt; 0 = 3&lt;br /&gt;
                  | otherwise = 4&lt;br /&gt;
&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
cuadrante4 :: (Int,Int) -&amp;gt; Int&lt;br /&gt;
cuadrante4 (x1,x2) | x1 * x2 == 0 = 0&lt;br /&gt;
                   | x1 &amp;gt; 0 &amp;amp;&amp;amp; x2 &amp;gt; 0 = 1&lt;br /&gt;
                   | x1 &amp;lt; 0 &amp;amp;&amp;amp; x2 &amp;gt; 0 = 2&lt;br /&gt;
                   | x1 &amp;lt; 0 &amp;amp;&amp;amp; x2 &amp;lt; 0 = 3&lt;br /&gt;
                   | x1 &amp;gt; 0 &amp;amp;&amp;amp; x2 &amp;lt; 0 = 4&lt;br /&gt;
                  &lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    simetricoH :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que &amp;#039;(simetricoH p)&amp;#039; es el punto simétrico de &amp;#039;p&amp;#039; respecto del eje&lt;br /&gt;
-- horizontal. Por ejemplo,&lt;br /&gt;
--    simetricoH (2,5)   ==  (2,-5)&lt;br /&gt;
--    simetricoH (2,-5)  ==  (2,5)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
simetricoH :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
simetricoH (x1,x2) = (x1,-x2)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
simetricoH1 :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
simetricoH1 p = (fst p,-snd p)&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función&lt;br /&gt;
--    simetricoV :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
-- tal que &amp;#039;(simetricoV p)&amp;#039; es el punto simétrico de &amp;#039;p&amp;#039; respecto del eje&lt;br /&gt;
-- vertical. Por ejemplo,&lt;br /&gt;
--    simetricoV (2,5)   ==  (-2,5)&lt;br /&gt;
--    simetricoV (2,-5)  ==  (-2,-5)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
simetricoV :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
simetricoV (x1,x2) = (-x1,x2)&lt;br /&gt;
- Elsa Domínguez&lt;br /&gt;
simetricoV1 :: (Int,Int) -&amp;gt; (Int,Int)&lt;br /&gt;
simetricoV1 p = (-fst p,snd p)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función&lt;br /&gt;
--    distancia :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; Float&lt;br /&gt;
-- tal que &amp;#039;(distancia p1 p2)&amp;#039; es la distancia entre los puntos &amp;#039;p1&amp;#039; y &amp;#039;p2&amp;#039;.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    distancia (1,2) (4,6)  ==  5.0&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Laura Arango, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
distancia :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; Float&lt;br /&gt;
distancia (x1,x2) (y1,y2) = sqrt((x1-y1)^2 + (x2-y2)^2)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia1 :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; Float&lt;br /&gt;
distancia1 p1 p2  =  sqrt((fst p2 - fst p1)^2 + (snd p2-snd p1)^2)&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
distancia2 :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; Float&lt;br /&gt;
distancia2 (x1,x2) (y1,y2) = sqrt(t^2 + s^2)&lt;br /&gt;
                          where t = x1-y1&lt;br /&gt;
                                s = x2-y2&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Comprobar con QuickCheck que se verifica la propiedad&lt;br /&gt;
-- triangular de la distancia; es decir, dados tres puntos p1, p2 y p3, la&lt;br /&gt;
-- distancia de p1 a p3 es menor o igual que la suma de las distancias de p1 a&lt;br /&gt;
-- p2 y de p2 a p3.&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Elsa Domínguez, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_triangular :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; Bool&lt;br /&gt;
prop_triangular p1 p2 p3 = distancia p1 p3 &amp;lt;= distancia p1 p2 + distancia p2 p3&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    &amp;gt; quickCheck prop_triangular&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función&lt;br /&gt;
--    puntoMedio :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; (Float,Float)&lt;br /&gt;
-- tal que &amp;#039;(puntoMedio p1 p2)&amp;#039; es el punto medio entre los puntos &amp;#039;p1&amp;#039; y &amp;#039;p2&amp;#039;.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    puntoMedio (0,2) (0,6)   ==  (0.0,4.0)&lt;br /&gt;
--    puntoMedio (-1,2) (7,6)  ==  (3.0,4.0)&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Laura Arango, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
puntoMedio :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; (Float,Float)&lt;br /&gt;
puntoMedio (x1,x2) (y1,y2) = ((x1+y1)/2, (x2+y2)/2)&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
puntoMedio1 :: (Float,Float) -&amp;gt; (Float,Float) -&amp;gt; (Float,Float)&lt;br /&gt;
puntoMedio1 (x1,x2) (y1,y2) = (t/2, s/2)&lt;br /&gt;
                           where t = x1 + y1&lt;br /&gt;
                                 s = x2 + y2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Repaso de operaciones lógicas                                      --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa. Su tabla de verdad&lt;br /&gt;
-- es&lt;br /&gt;
--    x     | y     | xor x y&lt;br /&gt;
--    ------+-------+---------&lt;br /&gt;
--    True  | True  | False &lt;br /&gt;
--    True  | False | True&lt;br /&gt;
--    False | True  | True&lt;br /&gt;
--    False | False | False&lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    xor1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (xor1 x y) es la disyunción excluyente de x e y, calculada a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
xor1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor1 True True  = False&lt;br /&gt;
xor1 True False = True&lt;br /&gt;
xor1 False True = True&lt;br /&gt;
xor1 False False = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22.2. Definir la función &lt;br /&gt;
--    xor2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (xor2 x y) es la disyunción excluyente de x e y, calculada a&lt;br /&gt;
-- partir de la tabla de verdad y patrones. Usar 2 ecuaciones, una por&lt;br /&gt;
-- cada valor del primer argumento. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
xor2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor2 x y  | y/= x =  True&lt;br /&gt;
          | y == x = False&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
xor2&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor2&amp;#039; True y = not y&lt;br /&gt;
xor2&amp;#039; False y = y&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22.3. Definir la función &lt;br /&gt;
--    xor3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (xor3 x y) es la disyunción excluyente de x e y, calculada &lt;br /&gt;
-- a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación (not). &lt;br /&gt;
-- Usar 1 ecuación. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
xor3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor3 x y =  (x &amp;amp;&amp;amp; not y) || (y &amp;amp;&amp;amp; not x)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22.4. Definir la función &lt;br /&gt;
--    xor4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (xor3 x y) es la disyunción excluyente de x e y, calculada&lt;br /&gt;
-- a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
xor4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor4 x y = if x == y then False else True&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
xor4&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor4&amp;#039; x y = if x/=y then True else False&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
xor4&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor4&amp;#039;&amp;#039; x y = x /= y&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22.5. Comprobar con QuickCheck que las cuatro definiciones&lt;br /&gt;
-- de xor son equivalentes.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_xor_equivalentes :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
prop_xor_equivalentes x y = xor1 x y == xor2 x y &amp;amp;&amp;amp; xor2 x y == xor3 x y &amp;amp;&amp;amp; xor3 x y == xor4 x y&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_xor_equivalentes&lt;br /&gt;
+++ OK, passed 100 tests&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23.1 Definir la función &lt;br /&gt;
--    or3 :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (or3 a b c) es la disyunción entre a, b y c; es decir,&lt;br /&gt;
-- ocurre a o b o c. Definir la función usando &amp;#039;||&amp;#039;. Por ejemplo,&lt;br /&gt;
--    or3 True True False  ==  True&lt;br /&gt;
--    or3 False False False ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
or3 :: Bool -&amp;gt; Bool -&amp;gt; Bool-&amp;gt; Bool &lt;br /&gt;
or3 a b c  = a || b || c&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
or3&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool-&amp;gt; Bool &lt;br /&gt;
or3&amp;#039;&amp;#039; a b c | a==True || b==True || c==True = True&lt;br /&gt;
          | otherwise = False&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23.2 Definir la función &lt;br /&gt;
--    or3&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (or3&amp;#039; a b c) es la disyunción entre a, b y c; es decir,&lt;br /&gt;
-- ocurre a o b o c. Definir la función usando &amp;#039;or&amp;#039; para listas.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    or3&amp;#039; True True False  ==  True&lt;br /&gt;
--    or3&amp;#039; False False False ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
or3&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
or3&amp;#039; a b c = or [a,b,c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 24.1 Definir la función &lt;br /&gt;
--    and3 :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
-- tal que (and3 a b c) es la conjunción entre a, b y c; es decir,&lt;br /&gt;
-- ocurre a y b y c. Definir la función usando &amp;#039;&amp;amp;&amp;amp;&amp;#039;. Por ejemplo,&lt;br /&gt;
--    and3 True True True  ==  True&lt;br /&gt;
--    and3 False True False ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
and3 :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
and3 a b c = a &amp;amp;&amp;amp; b &amp;amp;&amp;amp; c&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 24.2 Definir la función &lt;br /&gt;
--    and3&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
-- tal que (and3&amp;#039; a b c) es la conjunción entre a, b y c; es decir,&lt;br /&gt;
-- ocurre a o b o c. Definir la función usando &amp;#039;and&amp;#039; para listas.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    and3&amp;#039; True True True  ==  True&lt;br /&gt;
--    and3&amp;#039; False True False ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González&lt;br /&gt;
and3&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
and3&amp;#039; a b c = and [a,b,c]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 25.1. Definir la función &lt;br /&gt;
--    siglo20 :: Int -&amp;gt; Bool &lt;br /&gt;
-- tal que (siglo20 x) indica si el ańo x perteneció al siglo 20; es decir,&lt;br /&gt;
-- si está comprendido entre el ańo 1901 y 2000.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    siglo20 1902  == True&lt;br /&gt;
--    siglo20 2001 == False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
siglo20 :: Int -&amp;gt; Bool&lt;br /&gt;
siglo20 x = if  1901 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; 2000 then True&lt;br /&gt;
            else False&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
siglo201 :: Int -&amp;gt; Bool&lt;br /&gt;
siglo201 x = 1901 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= 2000&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
siglo20&amp;#039; :: Int -&amp;gt; Bool&lt;br /&gt;
siglo20&amp;#039; x = x &amp;gt; 1901 &amp;amp;&amp;amp; x &amp;lt; 2000&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 25.2. Definir la función &lt;br /&gt;
--    noSiglo20 :: Int -&amp;gt; Bool &lt;br /&gt;
-- tal que (noSiglo20 x) indica si el ańo x no perteneció al siglo 20; es decir,&lt;br /&gt;
-- si no está comprendido entre el ańo 1901 y 2000.&lt;br /&gt;
-- Definirla de tres formas distintas, una usando la función (siglo20 x), otra&lt;br /&gt;
-- usando &amp;#039;&amp;amp;&amp;amp;&amp;#039; y otra usando &amp;#039;||&amp;#039;.&lt;br /&gt;
--&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    noSiglo20 1902  == False&lt;br /&gt;
--    noSiglo20 2001 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
noSiglo20 :: Int -&amp;gt; Bool&lt;br /&gt;
noSiglo20 x = not (siglo20 x)&lt;br /&gt;
noSiglo20&amp;#039; = undefined  &lt;br /&gt;
noSiglo20&amp;#039;&amp;#039; x = x &amp;lt; 1901 || x &amp;gt;= 2000&lt;br /&gt;
-- Lucía Hernández, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
noSiglo20 :: Int -&amp;gt; Bool&lt;br /&gt;
noSiglo20 x = not(siglo20 x)&lt;br /&gt;
noSiglo20&amp;#039; x = if x &amp;lt;= 2000 &amp;amp;&amp;amp; x &amp;gt; 1901 then False&lt;br /&gt;
             else True&lt;br /&gt;
noSiglo20&amp;#039;&amp;#039; x  = x=&amp;gt;2000 || x&amp;lt; 1901&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
noSiglo20 :: Int -&amp;gt; Bool&lt;br /&gt;
noSiglo20 x = not (siglo20 x) &lt;br /&gt;
noSiglo20&amp;#039; x = not (x &amp;gt;= 1901 &amp;amp;&amp;amp; x &amp;lt;= 2000) &lt;br /&gt;
noSiglo20&amp;#039;&amp;#039; x = x &amp;lt; 1901 || x &amp;gt; 2000  &lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
noSiglo201 :: Int -&amp;gt; Bool&lt;br /&gt;
noSiglo201 x = not (siglo20 x)&lt;br /&gt;
noSiglo20&amp;#039;1 x = not(x&amp;gt;1901) &amp;amp;&amp;amp; not(x&amp;lt;2000)&lt;br /&gt;
noSiglo20&amp;#039;&amp;#039;1 x = x&amp;lt;1901 || x&amp;gt;2000&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 26. Definir la función &lt;br /&gt;
--    xnor :: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
-- tal que (xnor a b) se calcula con su tabla de verdad, que&lt;br /&gt;
-- es&lt;br /&gt;
--    x     | y     | xnor x y&lt;br /&gt;
--    ------+-------+---------&lt;br /&gt;
--    False | False | True &lt;br /&gt;
--    False | True  | False&lt;br /&gt;
--    True  | False | False&lt;br /&gt;
--    True  | True  | True&lt;br /&gt;
--&lt;br /&gt;
-- Emplear solo operadores lógicos (&amp;amp;&amp;amp;, ||, not).&lt;br /&gt;
-- &lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    xnor True True  ==  True&lt;br /&gt;
--    xnor False True ==  False&lt;br /&gt;
--    xnor False False  ==  True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
&lt;br /&gt;
xnor :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xnor x y =  (not x &amp;amp;&amp;amp; not y) || (x &amp;amp;&amp;amp;  y)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 27. Definir la función &lt;br /&gt;
--    aprueba :: Float -&amp;gt; Float -&amp;gt; Float -&amp;gt; Bool&lt;br /&gt;
-- tal que (aprueba n1 n2 n3) indica si con las notas de los&lt;br /&gt;
-- exámenes parciales n1, n2 y n3 se consigue aprobar la&lt;br /&gt;
-- asignatura. Los criterios para aprobar la asignatura son los siguientes:&lt;br /&gt;
--   * La media de las notas debe ser mayor o igual que 5, y&lt;br /&gt;
--   * Cada una de las notas de los exámenes parciales son mayor o igual&lt;br /&gt;
--     que 4.0,&lt;br /&gt;
--   * O en el último exámen se obtuvo un 10 (entonces siempre se aprueba)&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    aprueba 5.0 6.0 5.0 == True&lt;br /&gt;
--    aprueba 1.5 6.0 8.0 == False&lt;br /&gt;
--    aprueba 3.7 1.5 10.0 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
aprueba :: Float -&amp;gt; Float -&amp;gt; Float -&amp;gt; Bool&lt;br /&gt;
aprueba x y z | z == 10 = True&lt;br /&gt;
              | (x+y+z)/3 &amp;gt;= 5 &amp;amp;&amp;amp; and [x&amp;gt;4, y&amp;gt;4, z&amp;gt;4] = True&lt;br /&gt;
              | otherwise = False&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
aprueba :: Float -&amp;gt; Float -&amp;gt; Float -&amp;gt; Bool&lt;br /&gt;
aprueba n1 n2 n3 = (n1+n2+n3)/3 &amp;gt;= 5 &amp;amp;&amp;amp;( n1&amp;gt;=4 &amp;amp;&amp;amp; n2&amp;gt;=4 &amp;amp;&amp;amp; n3&amp;gt;=4) || n3 == 10 &lt;br /&gt;
-- Elsa Domínguez, Lucía González&lt;br /&gt;
aprueba2 :: Float -&amp;gt; Float -&amp;gt; Float -&amp;gt; Bool&lt;br /&gt;
aprueba2 n1 n2 n3 | and [n1 &amp;gt;= 4, n2 &amp;gt;= 4, n3 &amp;gt;= 4]  = (n1+n2+n3)/3 &amp;gt;= 5&lt;br /&gt;
                  | n3 == 10                         = True&lt;br /&gt;
                  | otherwise                        = False &lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
aprueba3 :: Float -&amp;gt; Float -&amp;gt; Float -&amp;gt; Bool&lt;br /&gt;
aprueba3 n1 n2 n3 | (n1+n2+n3)/3 &amp;gt;= 5 &amp;amp;&amp;amp; (n1 &amp;gt;= 4 &amp;amp;&amp;amp; n2 &amp;gt;= 4 &amp;amp;&amp;amp; n3 &amp;gt;= 4) || n3 == 10 = True&lt;br /&gt;
                 | otherwise = False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 28. Comprobar las leyes de Morgan con QuickCheck. Las&lt;br /&gt;
-- leyes de Morgan se definen como sigue:&lt;br /&gt;
--   * ley 1: no (A o B) == (no A) y (no B)&lt;br /&gt;
--   * ley 2: no (A y B) == (no A) o (no B)&lt;br /&gt;
-- Consejo: definir cada ley como una función por separado para componer&lt;br /&gt;
-- la propiedad&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
ley1:: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
ley1 a b = not (a || b) == (not a) &amp;amp;&amp;amp; (not b)&lt;br /&gt;
&lt;br /&gt;
ley2:: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
ley2 a b =  not (a &amp;amp;&amp;amp; b) == (not a) || (not b)&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_leyes_morgan :: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
prop_leyes_morgan a b = ley1 a b == ley2 a b&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez, Lucía González, Irene Ortega Moncayo &lt;br /&gt;
ley1 :: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
ley1 a b = not(a || b) ==( not a &amp;amp;&amp;amp; not b)&lt;br /&gt;
&lt;br /&gt;
ley2 :: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
ley2 a b = not (a&amp;amp;&amp;amp;b) == ( not a  || not b )&lt;br /&gt;
&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_leyes_morgan :: Bool -&amp;gt; Bool -&amp;gt; Bool &lt;br /&gt;
prop_leyes_morgan a b= ley1 a b &amp;amp;&amp;amp; ley2 a b&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Critorseb</name></author>
	</entry>
</feed>