<?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=Nicrodrui</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=Nicrodrui"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php/Especial:Contribuciones/Nicrodrui"/>
	<updated>2026-07-19T09:58:41Z</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_6&amp;diff=386</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_6&amp;diff=386"/>
		<updated>2021-11-05T09:17:54Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- I1M 2021-22: Rel_6.hs (5 de noviembre de 2021)&lt;br /&gt;
-- Definiciones por recursió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;
-- recursión correspondientes al tema 6 cuyas transparencias se &lt;br /&gt;
-- encuentran en  &lt;br /&gt;
--    http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-6.html&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.1. Definir por recursión la función&lt;br /&gt;
--    potencia :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (potencia x n) es x elevado al número natural n. Por ejemplo,  &lt;br /&gt;
--    potencia 2 3  ==  8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
potencia :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
potencia _ 0 = 1&lt;br /&gt;
potencia x n = x* potencia x (n-1)&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
potencia :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
potencia _ 0 = 1&lt;br /&gt;
potencia x n | n &amp;gt; 0 = x * potencia x (n-1)&lt;br /&gt;
             | n &amp;lt; 0 = error &amp;quot;n tiene que ser un natural (&amp;gt;=0)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.2. Comprobar con QuickCheck que la función potencia es&lt;br /&gt;
-- equivalente a la predefinida (^).&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_potencia :: Integer -&amp;gt; Integer -&amp;gt; Property&lt;br /&gt;
prop_potencia x n = n&amp;gt;=0 ==&amp;gt; x^n == potencia x n&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_potencia&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2.1. Dados dos números naturales, a y b, es posible&lt;br /&gt;
-- calcular su máximo común divisor mediante el Algoritmo de&lt;br /&gt;
-- Euclides. Este algoritmo se puede resumir en la siguiente fórmula:&lt;br /&gt;
--    mcd(a,b) = a,                   si b = 0&lt;br /&gt;
--             = mcd (b, a módulo b), si b &amp;gt; 0&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mcd :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (mcd a b) es el máximo común divisor de a y b calculado&lt;br /&gt;
-- mediante el algoritmo de Euclides. Por ejemplo,&lt;br /&gt;
--    mcd 30 45  ==  15&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
mcd :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
mcd a 0 = a&lt;br /&gt;
mcd a b = mcd b (mod a b)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2.2. Definir y comprobar la propiedad prop_mcd según la&lt;br /&gt;
-- cual el máximo común divisor de dos números a y b (ambos mayores que&lt;br /&gt;
-- 0) es siempre mayor o igual que 1 y además es menor o igual que el&lt;br /&gt;
-- menor de los números a  y b. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_mcd :: Integer -&amp;gt; Integer -&amp;gt; Property&lt;br /&gt;
prop_mcd a b = a&amp;gt;0 &amp;amp;&amp;amp; b&amp;gt;0 ==&amp;gt; mcd a b &amp;gt;=1 &amp;amp;&amp;amp; mcd a b &amp;lt;= min a b&lt;br /&gt;
&lt;br /&gt;
-- Su comprobación es quickCheck prop_mcd&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2.3. Teniendo en cuenta que buscamos el máximo común&lt;br /&gt;
-- divisor de a y b, sería razonable pensar que el máximo común divisor&lt;br /&gt;
-- siempre sería igual o menor que la mitad del máximo de a y b. Definir&lt;br /&gt;
-- esta propiedad y comprobarla.  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_mcd_div :: Integer -&amp;gt; Integer -&amp;gt; Property&lt;br /&gt;
prop_mcd_div a b = a&amp;gt;0 &amp;amp;&amp;amp; b&amp;gt;0 ==&amp;gt; (mcd a b) &amp;lt;= div (max a b)2&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_mcd_div&lt;br /&gt;
*** Failed! Falsifiable (after 1 test):&lt;br /&gt;
1&lt;br /&gt;
1&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
prop_mcd_div :: Integer -&amp;gt; Integer -&amp;gt; Property&lt;br /&gt;
prop_mcd_div a b = a&amp;gt;0 &amp;amp;&amp;amp; b&amp;gt;0 &amp;amp;&amp;amp; a/=b==&amp;gt; mcd a b &amp;lt;= (max a b) `div` 2&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
-- +++ OK, passed 100 tests; 407 discarded.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.1, Definir por recursión la función&lt;br /&gt;
--    pertenece :: Eq a =&amp;gt; a -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
-- tal que (pertenece x xs) se verifica si x pertenece a la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    pertenece 3 [2,3,5]  ==  True&lt;br /&gt;
--    pertenece 4 [2,3,5]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
pertenece :: Eq a =&amp;gt; a -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
pertenece _ [] = False&lt;br /&gt;
pertenece n (x:xs) | n == x = True&lt;br /&gt;
                   |otherwise =  pertenece n xs&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
pertenece :: Eq a =&amp;gt; a -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
pertenece _ [] = False&lt;br /&gt;
pertenece y (x:xs) = y==x || pertenece y xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3.2. Comprobar con quickCheck que pertenece es equivalente&lt;br /&gt;
-- a elem. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_pertenece :: Int -&amp;gt; [Int] -&amp;gt; Bool&lt;br /&gt;
prop_pertenece x xs = pertenece x xs == elem x xs&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_pertenece&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. Definir por recursión la función&lt;br /&gt;
--    concatenaListas :: [[a]] -&amp;gt; [a]&lt;br /&gt;
-- tal que (concatenaListas xss) es la lista obtenida concatenando las listas de&lt;br /&gt;
-- xss. Por ejemplo,&lt;br /&gt;
--    concatenaListas [[1..3],[5..7],[8..10]]  ==  [1,2,3,5,6,7,8,9,10]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández , Nicolás Rodríguez Ruiz&lt;br /&gt;
concatenaListas :: [[a]] -&amp;gt; [a]&lt;br /&gt;
concatenaListas  []  = []&lt;br /&gt;
concatenaListas (xs:xss) = xs ++ concatenaListas xss&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Comprobar con QuickCheck que concatenaListas es&lt;br /&gt;
-- equivalente a concat. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodrígez Ruiz&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_concat :: [[Int]] -&amp;gt; Bool&lt;br /&gt;
prop_concat xss = concat xss == concatenaListas xss&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.1. Definir por recursión la función&lt;br /&gt;
--    coge :: Int -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (coge n xs) es la lista de los n primeros elementos de&lt;br /&gt;
-- xs. Por ejemplo, &lt;br /&gt;
--    coge   3  [4..12]  ==  [4,5,6]&lt;br /&gt;
--    coge (-3) [4..12]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
coge :: Int -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
coge _ [] = []&lt;br /&gt;
coge n (x:xs) | n&amp;lt;=0 = []&lt;br /&gt;
              | otherwise = x : coge (n-1) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5.2. Comprobar con QuickCheck que coge es equivalente a&lt;br /&gt;
-- take. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_coge :: Int -&amp;gt; [Int] -&amp;gt; Bool&lt;br /&gt;
prop_coge n xs = coge n xs == take n xs&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck  prop_coge&lt;br /&gt;
+++ OK, passed 100 tests&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Definir, por recursión, la función &lt;br /&gt;
--    sumaCuadradosR :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaCuadradosR n) es la suma de los cuadrados de los números&lt;br /&gt;
-- de 1 a n. Por ejemplo, &lt;br /&gt;
--    sumaCuadradosR 4  ==  30 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
sumaCuadradosR :: Integer -&amp;gt; Integer&lt;br /&gt;
sumaCuadradosR 0 = 0&lt;br /&gt;
sumaCuadradosR n = n^2 + sumaCuadradosR (n-1)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Comprobar con QuickCheck si sumaCuadradosR n es igual a&lt;br /&gt;
-- n(n+1)(2n+1)/6. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_SumaCuadrados :: Integer -&amp;gt; Property&lt;br /&gt;
prop_SumaCuadrados n = n&amp;gt;=1 ==&amp;gt; sumaCuadradosR n == div (n*(n+1)*(2*n+1)) 6&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es  quickCheck  prop_SumaCuadrados&lt;br /&gt;
+++ OK, passed 100 tests&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir, por comprensión, la función &lt;br /&gt;
--    sumaCuadradosC :: Integer --&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaCuadradosC n) es la suma de los cuadrados de los números&lt;br /&gt;
-- de 1 a n. Por ejemplo, &lt;br /&gt;
--    sumaCuadradosC 4  ==  30 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
sumaCuadradosC :: Integer -&amp;gt; Integer&lt;br /&gt;
sumaCuadradosC n  = sum [ x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.4. Comprobar con QuickCheck que las funciones&lt;br /&gt;
-- sumaCuadradosR y sumaCuadradosC son equivalentes sobre los números&lt;br /&gt;
-- naturales. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_sumaCuadradosR :: Integer -&amp;gt; Property&lt;br /&gt;
prop_sumaCuadradosR n = n&amp;gt;=1 ==&amp;gt; sumaCuadradosR n == sumaCuadradosC n&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es  quickCheck  prop_sumaCuadradosR&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.1. Definir, por recursión, la función&lt;br /&gt;
--    digitosR :: Integer -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (digitosR n) es la lista de los dígitos del número n. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    digitosR 320274  ==  [3,2,0,2,7,4]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
digitosR :: Integer -&amp;gt; [Integer]&lt;br /&gt;
digitosR n = if n&amp;lt;10 then [n]&lt;br /&gt;
          else   digitosR (div n 10) ++ [rem n 10]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.2. Definir, por comprensión, la función&lt;br /&gt;
--    digitosC :: Integer -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (digitosC n) es la lista de los dígitos del número n. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    digitosC 320274  ==  [3,2,0,2,7,4]&lt;br /&gt;
-- Indicación: Usar las funciones show y read.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
digitosC :: Integer -&amp;gt; [Integer]&lt;br /&gt;
digitosC n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7.3. Comprobar con QuickCheck que las funciones digitosR y&lt;br /&gt;
-- digitosC son equivalentes.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_digitos :: Integer -&amp;gt; Property&lt;br /&gt;
prop_digitos n = n&amp;gt;=0 ==&amp;gt; digitosR n == digitosC n&lt;br /&gt;
  &lt;br /&gt;
-- La comprobación es quickCheck  prop_digitos&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por recursión, la función &lt;br /&gt;
--    sumaDigitosR :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDigitosR n) es la suma de los dígitos de n. Por ejemplo,&lt;br /&gt;
--    sumaDigitosR 3     ==  3&lt;br /&gt;
--    sumaDigitosR 2454  == 15&lt;br /&gt;
--    sumaDigitosR 20045 == 11&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
sumaDigitosR :: Integer -&amp;gt; Integer&lt;br /&gt;
sumaDigitosR n = if n&amp;lt;10 then n&lt;br /&gt;
                else rem n 10 + sumaDigitosR (div n 10)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, sin usar recursión, la función &lt;br /&gt;
--    sumaDigitosNR :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDigitosNR n) es la suma de los dígitos de n. Por ejemplo,&lt;br /&gt;
--    sumaDigitosNR 3     ==  3&lt;br /&gt;
--    sumaDigitosNR 2454  == 15&lt;br /&gt;
--    sumaDigitosNR 20045 == 11&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
sumaDigitosNR :: Integer -&amp;gt; Integer&lt;br /&gt;
sumaDigitosNR n = sum (digitosR n)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.3. Comprobar con QuickCheck que las funciones sumaDigitosR&lt;br /&gt;
-- y sumaDigitosNR son equivalentes.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_sumaDigitos :: Integer -&amp;gt; Property&lt;br /&gt;
prop_sumaDigitos n = n&amp;gt;= 0 ==&amp;gt; sumaDigitosR n  == sumaDigitosNR n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es  quickCheck prop_sumaDigitos&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por recursión, la función &lt;br /&gt;
--    listaNumeroR :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (listaNumeroR xs) es el número formado por los dígitos xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    listaNumeroR [5]        == 5&lt;br /&gt;
--    listaNumeroR [1,3,4,7]  == 1347&lt;br /&gt;
--    listaNumeroR [0,0,1]    == 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
listaNumeroR :: [Integer] -&amp;gt; Integer&lt;br /&gt;
listaNumeroR [] = 0&lt;br /&gt;
listaNumeroR [x] = x&lt;br /&gt;
listaNumeroR (x:xs) = x*10^(length (xs)) + listaNumeroR xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por comprensión, la función &lt;br /&gt;
--    listaNumeroC :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (listaNumeroC xs) es el número formado por los dígitos xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    listaNumeroC [5]        == 5&lt;br /&gt;
--    listaNumeroC [1,3,4,7]  == 1347&lt;br /&gt;
--    listaNumeroC [0,0,1]    == 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
listaNumeroC :: [Integer] -&amp;gt; Integer&lt;br /&gt;
listaNumeroC xs = sum [x*10^s | (x,s) &amp;lt;- zip(reverse xs) [0..length xs -1]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.3. Comprobar con QuickCheck que las funciones&lt;br /&gt;
-- listaNumeroR y listaNumeroC son equivalentes.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_listaNumero :: [Integer] -&amp;gt; Bool&lt;br /&gt;
prop_listaNumero xs = listaNumeroR xs == listaNumeroC xs&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es quickCheck prop_listaNumero&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.1. Definir, por recursión, la función &lt;br /&gt;
--    mayorExponenteR :: Integer -&amp;gt; Integer -&amp;gt; Integer &lt;br /&gt;
-- tal que (mayorExponenteR a b) es el exponente de la mayor potencia de&lt;br /&gt;
-- a que divide b. Por ejemplo,&lt;br /&gt;
--    mayorExponenteR 2 8    ==  3&lt;br /&gt;
--    mayorExponenteR 2 9    ==  0&lt;br /&gt;
--    mayorExponenteR 5 100  ==  2&lt;br /&gt;
--    mayorExponenteR 2 60   ==  2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mayorExponenteR :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
mayorExponenteR  _ 0 = 0&lt;br /&gt;
mayorExponenteR a b | mod b (a) == 0 = 1 + mayorExponenteR a( div b a)&lt;br /&gt;
                    | otherwise = 0&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10.2. Definir, por comprensión, la función &lt;br /&gt;
--    mayorExponenteC :: Integer -&amp;gt; Integer -&amp;gt; Integer &lt;br /&gt;
-- tal que (mayorExponenteC a b) es el exponente de la mayor potencia de&lt;br /&gt;
-- a que divide a b. Por ejemplo,&lt;br /&gt;
--    mayorExponenteC 2 8    ==  3&lt;br /&gt;
--    mayorExponenteC 5 100  ==  2&lt;br /&gt;
--    mayorExponenteC 5 101  ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mayorExponenteC :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
mayorExponenteC a b = last [s | s&amp;lt;- [0..b], mod b (a^s) == 0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=357</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=357"/>
		<updated>2021-10-29T08:38:04Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (numVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (numVeces xs) xs&lt;br /&gt;
        numVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
masOcurrentes&amp;#039; xs = [ a | a &amp;lt;- xs , ocurrencia a xs == maximum (ocurrencias xs) ]&lt;br /&gt;
&lt;br /&gt;
ocurrencias xs = [ ocurrencia a xs | a &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
ocurrencia a xs = sum [ 1 | b &amp;lt;- xs, b == a]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = [ ys | ys &amp;lt;- yss, xs `productoEscalar` ys==0]&lt;br /&gt;
  where productoEscalar xs ys = sum [a*x | (a,x) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Elsa Domínguez y Nicolás Rodríguez Ruiz&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = sum [distancia a b | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
  where distancia (a,b) (x,y) = sqrt((x-a)^2 + (y-b)^2)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = rem n 10&lt;br /&gt;
primera n =  fromEnum (head(show n)) - 48&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez y Nicolás Rodríguez Ruiz&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = and [ ultima a == primera b | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=356</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=356"/>
		<updated>2021-10-29T08:32:05Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (numVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (numVeces xs) xs&lt;br /&gt;
        numVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
masOcurrentes&amp;#039; xs = [ a | a &amp;lt;- xs , ocurrencia a xs == maximum (ocurrencias xs) ]&lt;br /&gt;
&lt;br /&gt;
ocurrencias xs = [ ocurrencia a xs | a &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
ocurrencia a xs = sum [ 1 | b &amp;lt;- xs, b == a]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = [ ys | ys &amp;lt;- yss, xs `productoEscalar` ys==0]&lt;br /&gt;
  where productoEscalar xs ys = sum [a*x | (a,x) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = rem n 10&lt;br /&gt;
primera n =  fromEnum (head(show n)) - 48&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez y Nicolás Rodríguez Ruiz&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = and [ ultima a == primera b | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=355</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=355"/>
		<updated>2021-10-29T08:25:23Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (numVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (numVeces xs) xs&lt;br /&gt;
        numVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
masOcurrentes&amp;#039; xs = [ a | a &amp;lt;- xs , ocurrencia a xs == maximum (ocurrencias xs) ]&lt;br /&gt;
&lt;br /&gt;
ocurrencias xs = [ ocurrencia a xs | a &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
ocurrencia a xs = sum [ 1 | b &amp;lt;- xs, b == a]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = [ ys | ys &amp;lt;- yss, xs `productoEscalar` ys==0]&lt;br /&gt;
  where productoEscalar xs ys = sum [a*x | (a,x) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = rem n 10&lt;br /&gt;
primera n =  fromEnum (head(show n)) - 48&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=354</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=354"/>
		<updated>2021-10-29T08:22:33Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (maximoVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (maximoVeces xs) xs&lt;br /&gt;
        maximoVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
masOcurrentes&amp;#039; xs = [ a | a &amp;lt;- xs , ocurrencia a xs == maximum (ocurrencias xs) ]&lt;br /&gt;
&lt;br /&gt;
ocurrencias xs = [ ocurrencia a xs | a &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
ocurrencia a xs = sum [ 1 | b &amp;lt;- xs, b == a]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = [ ys | ys &amp;lt;- yss, xs `productoEscalar` ys==0]&lt;br /&gt;
  where productoEscalar xs ys = sum [a*x | (a,x) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = rem n 10&lt;br /&gt;
primera n =  fromEnum (head(show n)) - 48&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=353</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=353"/>
		<updated>2021-10-29T08:11:05Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (maximoVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (maximoVeces xs) xs&lt;br /&gt;
        maximoVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
masOcurrentes&amp;#039; xs = [ a | a &amp;lt;- xs , ocurrencia a xs == maximum (ocurrencias xs) ]&lt;br /&gt;
&lt;br /&gt;
ocurrencias xs = [ ocurrencia a xs | a &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
ocurrencia a xs = sum [ 1 | b &amp;lt;- xs, b == a]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = [ ys | ys &amp;lt;- yss, xs `productoEscalar` ys==0]&lt;br /&gt;
  where productoEscalar xs ys = sum [a*x | (a,x) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = undefined&lt;br /&gt;
primera n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=351</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=351"/>
		<updated>2021-10-29T08:03:31Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz y Elsa Domínguez&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = [ b | (a,b) &amp;lt;- (paresOrd xs), a ==( maximum (maximoVeces xs))]&lt;br /&gt;
  where paresOrd xs = zip (maximoVeces xs) xs&lt;br /&gt;
        maximoVeces xs = [veces x xs | x &amp;lt;- xs]&lt;br /&gt;
        veces n xs = sum[ 1 | x &amp;lt;- xs, x ==n]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = undefined&lt;br /&gt;
primera n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=348</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=348"/>
		<updated>2021-10-29T07:01:42Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores&amp;#039; m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
                where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
                      divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
                   where cuadrados n = [x^2 | x &amp;lt;- [2..n]]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
		           where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
		                 sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
		                 ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Elsa Domínguez&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -  elem (x^s) (potencias x) no hace falta, ya que siempre se va a cumplir&lt;br /&gt;
-- -  elem (x^s)(divisores y) se puede simplificar a simplemente comprobar si x^s divide a y&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
multiplicidad1 :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad1 x y = if x == 1 then 1 else sum [1 | n &amp;lt;- [1..y], rem y (x^n) == 0]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- Prof: en esta solución se puede simplificar lo siguiente:&lt;br /&gt;
-- -   a^x `elem` (divisores b) se puede simplificar a simplemente comprobar si a^x divide a b&lt;br /&gt;
&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini n = not (null (cifrasIguales n))&lt;br /&gt;
           where cifrasIguales n = [a | (a,b) &amp;lt;- ns, a == b]   -- Prof: se puede simplificar con la función elem&lt;br /&gt;
                 ns = [(a,b) | a &amp;lt;- cifras n, b &amp;lt;- cifras (2*n)]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras n = [read [x] | x &amp;lt;- show n]&lt;br /&gt;
&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini1 :: Integer -&amp;gt; Bool&lt;br /&gt;
angelini1 n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]] &lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
aproximaPi n = sqrt (6*sum [1/x^2 | x &amp;lt;- [1..n]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Elsa Domínguez&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
conPos1 :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos1 xs = zip xs [0..length xs-1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la función&lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = maximum [abs (a-b) | (a,b) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = reverse (drop (div (length xs) 2) [a+b | (a,b) &amp;lt;- zip xs (reverse xs)])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez &lt;br /&gt;
cercanos1 :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos1 xs ys = [(a,b) | a &amp;lt;- xs, b &amp;lt;- ys, abs (a-b) == minimum (distanciaPares xs ys)]&lt;br /&gt;
&lt;br /&gt;
distanciaPares xs ys = [abs (a-b) | a &amp;lt;- xs, b &amp;lt;- ys]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = [abs (a-b) | (a,b) &amp;lt;- ys] == [x^2 | x &amp;lt;- [1..length (ys)]]&lt;br /&gt;
                where ys  = zip (tail xs) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = undefined&lt;br /&gt;
primera n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=337</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=337"/>
		<updated>2021-10-28T18:40:45Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
  where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
        divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
          where cuadrados n = [x^2 | x&amp;lt;-[2..n]]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
        sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
        ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Prof: Falta ver cómo calcular los números especiales de tres cifras!!&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [2..n], n `mod` a == 0]&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]]&lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
unitarios x = [ sum[  x*(10^a) | a &amp;lt;- [0..n] ] | n &amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
aproximaPi n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la &lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
numeroConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = undefined&lt;br /&gt;
primera n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=336</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_4&amp;diff=336"/>
		<updated>2021-10-28T18:28:18Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_4.hs (27 de Octubre de 2021)&lt;br /&gt;
-- Definiciones por comprensión (II)&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.&lt;br /&gt;
-- &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- § Librerías auxiliares                                             --&lt;br /&gt;
-- ---------------------------------------------------------------------&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;
--    divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (divisoresPrimos x) es la lista de los divisores primos de x. &lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    divisoresPrimos 40  ==  [2,5]&lt;br /&gt;
--    divisoresPrimos 70  ==  [2,5,7]&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
primo :: Int -&amp;gt; Bool&lt;br /&gt;
primo n = divisores n == [1,n]&lt;br /&gt;
&lt;br /&gt;
divisoresPrimos :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos n = [ x | x &amp;lt;- divisores n, primo x]&lt;br /&gt;
&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
divisores&amp;#039; n = [x | x &amp;lt;- [1..n], rem n x == 0]&lt;br /&gt;
divisoresPrimos&amp;#039; :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresPrimos&amp;#039; y = [ m | m &amp;lt;- [2..y], divisores m == [1,m], rem y m == 0]  -- Prof: debería usar divisores&amp;#039;?&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
divisoresPrimos x = [a | a &amp;lt;- (primos x), x `mod`a == 0]&lt;br /&gt;
  where primos n = [a | a &amp;lt;- [1..n], divisores a == [1,a]]&lt;br /&gt;
        divisores n = [ a | a &amp;lt;- [1..n], n `mod` a == 0]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Un número es libre de cuadrados si no es divisible por el&lt;br /&gt;
-- cuadrado de ningún entero mayor que 1. Por ejemplo, 70 es libre de&lt;br /&gt;
-- cuadrado porque sólo es divisible por 1, 2, 5, 7 y 70; en cambio, 40&lt;br /&gt;
-- no es libre de cuadrados porque es divisible por 2^2. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función  &lt;br /&gt;
--    libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (libreDeCuadrados x) se verifica si x es libre de cuadrados. &lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    libreDeCuadrados 70  ==  True&lt;br /&gt;
--    libreDeCuadrados 40  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
libreDeCuadrados :: Int -&amp;gt; Bool&lt;br /&gt;
libreDeCuadrados n = null [x | x&amp;lt;- cuadrados n, mod n x == 0]&lt;br /&gt;
          where cuadrados n = [x^2 | x&amp;lt;-[2..n]]&lt;br /&gt;
&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
libreDeCuadrados n =  [ a | a &amp;lt;- divisores n, (sq a) == (ndsq a) ] == [] -- Si el conjunto esta vacio =&amp;gt; n no es producto de cuadrados&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [2..n-1], n `mod` a == 0]&lt;br /&gt;
        sq a = sqrt (fromIntegral a) -- Raiz con decimales&lt;br /&gt;
        ndsq a = fromIntegral(truncate (sq a)) -- Raiz sin decimales&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. [Del problema 21 del Proyecto Euler]. Sea d(n) la suma&lt;br /&gt;
-- de los divisores propios de n. Si d(a) = b y d(b) = a, siendo a&lt;br /&gt;
-- distinto de b,  &lt;br /&gt;
-- decimos que a y b son un par de números amigos. Por ejemplo, los&lt;br /&gt;
-- divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y&lt;br /&gt;
-- 110; por tanto, d(220) = 284. Los divisores propios de 284 son 1, 2,&lt;br /&gt;
-- 4, 71 y 142; por tanto,  d(284) = 220.  Luego, 220 y 284 son dos&lt;br /&gt;
-- números amigos. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    amigos :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (amigos a b) se verifica si a y b son números amigos. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    amigos 6 6       == False&lt;br /&gt;
--    amigos 220 248   == False&lt;br /&gt;
--    amigos 220 284   == True&lt;br /&gt;
--    amigos 100 200   == False&lt;br /&gt;
--    amigos 1184 1210 == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
divisores :: Int -&amp;gt; [Int]&lt;br /&gt;
divisores n = [x | x&amp;lt;-[1..n], mod n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos1 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos1 a b = and [sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a, a/=b]&lt;br /&gt;
         where sumaDivisores n  = sum(divisores n) - n&lt;br /&gt;
&lt;br /&gt;
-- Prof: En clase hemos visto&lt;br /&gt;
divisoresP :: Int -&amp;gt; [Int]&lt;br /&gt;
divisoresP n = [x | x&amp;lt;-[1..n-1], rem n x == 0]&lt;br /&gt;
&lt;br /&gt;
amigos2 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos2 a b = sumaDivisores a == b &amp;amp;&amp;amp; sumaDivisores b == a &amp;amp;&amp;amp; a/=b&lt;br /&gt;
         where sumaDivisores n  = sum(divisoresP n)&lt;br /&gt;
&lt;br /&gt;
-- Prof: he movido aquí esta solución que estaba en el primer ejercicio&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
d x = [n | n &amp;lt;- [1..x], rem x n == 0]&lt;br /&gt;
sumad x = sum (d x) &lt;br /&gt;
&lt;br /&gt;
amigos3 :: Int -&amp;gt; Int -&amp;gt; Bool&lt;br /&gt;
amigos3 a b = if a == b then False else sumad a == sumad b&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. (Problema 211 del proyecto Euler) Dado un entero&lt;br /&gt;
-- positivo n, consideremos la suma de los cuadrados de sus divisores,&lt;br /&gt;
-- Por ejemplo,  &lt;br /&gt;
--    f(10) = 1 + 4 + 25 + 100 = 130&lt;br /&gt;
--    f(42) = 1 + 4 +  9 +  36 + 49 + 196 + 441 + 1764 = 2500&lt;br /&gt;
-- Decimos que n es especial si f(n) es un cuadrado perfecto. En los&lt;br /&gt;
-- ejemplos anteriores, 42 es especial y 10 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    especial:: Int -&amp;gt; Bool&lt;br /&gt;
-- tal que (especial x) se verifica si x es un número es especial. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    especial 42  ==  True&lt;br /&gt;
--    especial 10  ==  False&lt;br /&gt;
--&lt;br /&gt;
-- Calcular todos los números especiales de tres cifras.&lt;br /&gt;
-- El resultado es:&lt;br /&gt;
-- λ&amp;gt; calculo&lt;br /&gt;
-- [246,287,728]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
sumaDivisoresCuadrados n = sum [ x^2  | x&amp;lt;- divisores n]&lt;br /&gt;
especial :: Int -&amp;gt; Bool&lt;br /&gt;
especial n = x^2 == sumaDivisoresCuadrados n&lt;br /&gt;
  where s = fromIntegral (sumaDivisoresCuadrados n)&lt;br /&gt;
        x = floor (sqrt s)&lt;br /&gt;
&lt;br /&gt;
-- Prof: Otra solución sin usar floor ni sqrt (aunque más lenta)&lt;br /&gt;
especial2 :: Int -&amp;gt; Bool&lt;br /&gt;
especial2 n = elem s [  x^2 | x &amp;lt;-[1 .. s]]&lt;br /&gt;
  where s = sumaDivisoresCuadrados n&lt;br /&gt;
&lt;br /&gt;
-- Prof: Falta ver cómo calcular los números especiales de tres cifras!!&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
especial3 = [ x | x&amp;lt;-[100..999], especial x]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. La multiplicidad de x en y es la mayor potencia de x&lt;br /&gt;
-- que divide a y. Por ejemplo, la multiplicidad de 2 en 40 es 3 porque&lt;br /&gt;
-- 40 es divisible por 2^3 y no lo es por 2^4. Además, la multiplicidad&lt;br /&gt;
-- de 1 en cualquier número se supone igual a 1. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (multiplicidad x y) es la&lt;br /&gt;
-- multiplicidad de x en y. Por ejemplo,&lt;br /&gt;
--    multiplicidad 2 40  ==  3&lt;br /&gt;
--    multiplicidad 5 40  ==  1&lt;br /&gt;
--    multiplicidad 3 40  ==  0&lt;br /&gt;
--    multiplicidad 1 40  ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplicidad :: Integer -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
multiplicidad 1 _ = 1&lt;br /&gt;
multiplicidad x y = last  [ s | s&amp;lt;-[0..y], elem (x^s) (potencias x), elem (x^s)(divisores y)]&lt;br /&gt;
       where potencias n = [n^s | s&amp;lt;-[0..y]]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
multiplicidad a b = sum [1 | x &amp;lt;- [1..length(divisores b)], a^x `elem` (divisores b)]&lt;br /&gt;
  where divisores n = [ a | a &amp;lt;- [2..n], n `mod` a == 0]&lt;br /&gt;
-- -------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.1. Sea t una lista de pares de la forma &lt;br /&gt;
--    (nombre, [(asig_1, nota_1),...,(asig_k, nota.k)])&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
--          (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
--          (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
--          (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
-- tal que (calificaciones t p) es la lista de las calificaciones de la&lt;br /&gt;
-- persona p en la lista t. Por ejemplo, &lt;br /&gt;
--    ghci&amp;gt; calificaciones t1 &amp;quot;Pedro&amp;quot;&lt;br /&gt;
--    [(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
t1 :: [(String,[(String,Int)])]&lt;br /&gt;
t1 = [(&amp;quot;Ana&amp;quot;,[(&amp;quot;Alg&amp;quot;,1),(&amp;quot;Cal&amp;quot;,3),(&amp;quot;Inf&amp;quot;,8),(&amp;quot;Fis&amp;quot;,2)]),&lt;br /&gt;
      (&amp;quot;Juan&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,1),(&amp;quot;Inf&amp;quot;,2),(&amp;quot;Fis&amp;quot;,9)]),&lt;br /&gt;
      (&amp;quot;Alba&amp;quot;,[(&amp;quot;Alg&amp;quot;,5),(&amp;quot;Cal&amp;quot;,6),(&amp;quot;Inf&amp;quot;,6),(&amp;quot;Fis&amp;quot;,5)]),&lt;br /&gt;
      (&amp;quot;Pedro&amp;quot;,[(&amp;quot;Alg&amp;quot;,9),(&amp;quot;Cal&amp;quot;,5),(&amp;quot;Inf&amp;quot;,3),(&amp;quot;Fis&amp;quot;,1)])]&lt;br /&gt;
&lt;br /&gt;
calificaciones :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; [(String,Int)]&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
calificaciones t p = head[  ns | (nom, ns) &amp;lt;- t, nom == p ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.2. Definir la función  &lt;br /&gt;
--    todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- tal que (todasAprobadas t p) se cumple si en la lista t, p tiene&lt;br /&gt;
-- todas las asignaturas aprobadas. Por ejemplo,&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Alba&amp;quot;  ==  True&lt;br /&gt;
--    todasAprobadas t1 &amp;quot;Pedro&amp;quot; ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
todasAprobadas :: [(String,[(String,Int)])] -&amp;gt; String -&amp;gt; Bool&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
todasAprobadas t p = and[n&amp;gt;=5 | (_, n) &amp;lt;- (calificaciones t p)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6.3. Definir la función  &lt;br /&gt;
--    aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- tal que (aprobados t) es la lista de los alumnos de la lista de notas&lt;br /&gt;
-- t que han aprobado todas las asignaturas.Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; aprobados t1  ==  [&amp;quot;Alba&amp;quot;]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
aprobados :: [(String,[(String,Int)])] -&amp;gt; [String]&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
aprobados t = [nom | (nom, _) &amp;lt;- t, todasAprobadas t nom]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un número n es de Angelini si n y 2n tienen algún&lt;br /&gt;
-- dígito común. Por ejemplo, 2014 es un número de Angelini ya que 2014&lt;br /&gt;
-- y su doble (4028) comparten los dígitos 4 y 0.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- tal que (angelini n) se verifica si n es un número de Angelini. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    angelini 2014  ==  True&lt;br /&gt;
--    angelini 2067  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
angelini :: Integer -&amp;gt; Bool&lt;br /&gt;
-- Nicolás Rodríguez Ruiz&lt;br /&gt;
angelini n = or[c `elem` (show (2*n)) | c &amp;lt;- (show n)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir la función &lt;br /&gt;
--    unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal (unitarios n) es la lista de números [n,nn, nnn, ....]. Por&lt;br /&gt;
-- ejemplo.  &lt;br /&gt;
--    take 7 (unitarios 3) == [3,33,333,3333,33333,333333,3333333]&lt;br /&gt;
--    take 3 (unitarios 1) == [1,11,111]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
repetir x n  = sum [x*10^i | i&amp;lt;-[0..n-1]]&lt;br /&gt;
&lt;br /&gt;
unitarios :: Int -&amp;gt; [Int]&lt;br /&gt;
unitarios x = [ (repetir x n) | n&amp;lt;- [1..]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir la función &lt;br /&gt;
--    multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (multiplosUnitarios x y n) es la lista de los n primeros&lt;br /&gt;
-- múltiplos de x cuyo único dígito es y. Por ejemplo,&lt;br /&gt;
--    multiplosUnitarios 7 1 2  == [111111,111111111111]&lt;br /&gt;
--    multiplosUnitarios 11 3 5 == [33,3333,333333,33333333,3333333333]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
multiplosUnitarios :: Int -&amp;gt; Int -&amp;gt; Int -&amp;gt; [Int]&lt;br /&gt;
multiplosUnitarios x y n = take n ([a  | a&amp;lt;- unitarios y, mod a x == 0])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función &lt;br /&gt;
--    masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (masOcurrentes xs) es la lista de los elementos de xs que&lt;br /&gt;
-- ocurren el máximo número de veces. Por ejemplo,&lt;br /&gt;
--    masOcurrentes [1,2,3,4,3,2,3,1,4] == [3,3,3]&lt;br /&gt;
--    masOcurrentes [1,2,3,4,5,2,3,1,4] == [1,2,3,4,2,3,1,4]&lt;br /&gt;
--    masOcurrentes &amp;quot;Salamanca&amp;quot;         == &amp;quot;aaaa&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
masOcurrentes :: Eq a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
masOcurrentes xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. La suma de la serie&lt;br /&gt;
--    1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + ...&lt;br /&gt;
-- es pi^2/6. Por tanto, pi se puede aproximar mediante la raíz cuadrada&lt;br /&gt;
-- de 6 por la suma de la serie.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función aproximaPi tal que (aproximaPi n) es la aproximación &lt;br /&gt;
-- de pi obtenida mediante n términos de la serie. Por ejemplo, &lt;br /&gt;
--    aproximaPi 4    == 2.9226129861250305&lt;br /&gt;
--    aproximaPi 1000 == 3.1406380562059946&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
aproximaPi n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Una representación de 20 en base 2 es [0,0,1,0,1] pues&lt;br /&gt;
-- 20 = 1*2^2 + 1*2^4. Y una representación de 46 en base 3 es [1,0,2,1]&lt;br /&gt;
-- pues 46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
-- tal que (deBaseABase10 b xs) es el número n tal que su representación&lt;br /&gt;
-- en base b es xs. Por ejemplo, &lt;br /&gt;
--    deBaseABase10 2 [0,0,1,0,1]      == 20&lt;br /&gt;
--    deBaseABase10 2 [1,1,0,1]        == 11&lt;br /&gt;
--    deBaseABase10 3 [1,0,2,1]        == 46&lt;br /&gt;
--    deBaseABase10 5 [0,2,1,3,1,4,1]  == 2916&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
deBaseABase10 :: Int -&amp;gt; [Int] -&amp;gt; Int&lt;br /&gt;
deBaseABase10 b xs = sum [i*( b^n)  | (i,n)&amp;lt;- zip  xs [0..length xs -1] ]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.1. Definir la función &lt;br /&gt;
--    conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
-- tal que (conPos xs) es la lista obtenida a partir de xs especificando&lt;br /&gt;
-- las posiciones de sus elementos. Por ejemplo, &lt;br /&gt;
--    conPos [1,5,0,7] == [(1,0),(5,1),(0,2),(7,3)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
conPos :: [a] -&amp;gt; [(a,Int)]&lt;br /&gt;
conPos xs = [ (x,y) | (x,y)&amp;lt;- zip xs ys]&lt;br /&gt;
       where ys = [0..length xs - 1]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12.2. Definir la &lt;br /&gt;
--    pares :: [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (pares cs) es la cadena formada por los caracteres en&lt;br /&gt;
-- posición par de cs. Por ejemplo,  &lt;br /&gt;
--    pares &amp;quot;el cielo sobre berlin&amp;quot; == &amp;quot;e il or eln&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
pares :: [a] -&amp;gt; [a]&lt;br /&gt;
pares cs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Dos listas xs, ys de la misma longitud son&lt;br /&gt;
-- perpendiculares si el producto escalar de ambas es 0, donde el&lt;br /&gt;
-- producto escalar de dos listas de enteros xs e ys viene&lt;br /&gt;
-- dado por la suma de los productos de los elementos correspondientes.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
-- tal que (perpendiculares xs yss) es la lista de los elementos de yss&lt;br /&gt;
-- que son perpendiculares a xs. Por ejemplo,&lt;br /&gt;
--    ghci&amp;gt; perpendiculares [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--    [[0,1,0],[-1,7,1]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
perpendiculares :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
perpendiculares xs yss = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Dada una lista de números enteros, definiremos el&lt;br /&gt;
-- mayor salto como el mayor valor de las diferencias (en valor&lt;br /&gt;
-- absoluto) entre números consecutivos de la lista. Por ejemplo, dada&lt;br /&gt;
-- la lista [2,5,-3] las distancias son &lt;br /&gt;
--    3 (valor absoluto de la resta 2 - 5) y&lt;br /&gt;
--    8 (valor absoluto de la resta de 5 y (-3))&lt;br /&gt;
-- Por tanto, su mayor salto es 8. No está definido el mayor salto para&lt;br /&gt;
-- listas con menos de 2 elementos&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función &lt;br /&gt;
--    mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
-- tal que (mayorSalto xs) es el mayor salto de la lista xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    mayorSalto [1,5]              == 4&lt;br /&gt;
--    mayorSalto [10,-10,1,4,20,-2] == 22&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
mayorSalto :: [Integer] -&amp;gt; Integer&lt;br /&gt;
mayorSalto xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función&lt;br /&gt;
--    longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
-- tal que (longCamino xs) es la longitud del camino determinado por los&lt;br /&gt;
-- puntos del plano listados en xs. Por ejemplo,&lt;br /&gt;
--    longCamino [(0,0),(1,0),(2,1),(2,0)] == 3.4142137&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
longCamino :: [(Float,Float)] -&amp;gt; Float&lt;br /&gt;
longCamino xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función&lt;br /&gt;
--    numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
-- tal que (numeroConsecutivosC xs) es la cantidad de números&lt;br /&gt;
-- consecutivos que aparecen al comienzo de la lista xs. Por ejemplo, &lt;br /&gt;
--    numeroConsecutivosC [1,3,5,7,9]      ==  1&lt;br /&gt;
--    numeroConsecutivosC [1,2,3,4,5,7,9]  ==  5&lt;br /&gt;
--    numeroConsecutivosC []               ==  0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numeroConsecutivos :: (Num a, Eq a) =&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
numeroConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función&lt;br /&gt;
--    sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
-- tal que (sumaEquidistantes xs) es la lista sumando el primer elemento&lt;br /&gt;
-- de xs con el último, el segundo con el penúltimo y así&lt;br /&gt;
-- sucesivamente. Por ejemplo, &lt;br /&gt;
--    sumaEquidistantes [6,5,3,1]              ==  [7,8]&lt;br /&gt;
--    sumaEquidistantes [6,5,3]                ==  [9,10]&lt;br /&gt;
--    sumaEquidistantes [3,2,3,2]              ==  [5,5]&lt;br /&gt;
--    sumaEquidistantes [6,5,3,1,2,0,4,7,8,9]  ==  [15,13,10,5,2]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaEquidistantes :: Num a =&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;
sumaEquidistantes xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. La distancia entre dos números es el valor absoluto de&lt;br /&gt;
-- su diferencia. Por ejemplo, la distancia entre 2 y 5 es 3. &lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
-- tal que (cercanos xs ys) es la lista de pares de elementos de xs e ys&lt;br /&gt;
-- cuya distancia es mínima. Por ejemplo,&lt;br /&gt;
--    cercanos [3,7,2,1] [5,11,9]  ==  [(3,5),(7,5),(7,9)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
distancia x y = abs(x-y)&lt;br /&gt;
cercanos :: [Int] -&amp;gt; [Int] -&amp;gt; [(Int,Int)]&lt;br /&gt;
cercanos xs ys = [(x,y) | x&amp;lt;- xs, y&amp;lt;-ys, distancia x y == minimum [distancia x&amp;#039; y&amp;#039; | x&amp;#039;&amp;lt;- xs, y&amp;#039;&amp;lt;-ys]]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. [De la IMO 1996]. Una sucesión [a(0),a(1),...,a(n)] &lt;br /&gt;
-- se denomina cuadrática si para cada i   {1, 2,..., n} se cumple que &lt;br /&gt;
--    |a(i)- a(i-1)| = i^2 .&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (esCuadratica xs) se verifica si xs cuadrática.  Por ejemplo,&lt;br /&gt;
--    esCuadratica [2,1,-3,6]                      == True&lt;br /&gt;
--    esCuadratica [2,1,3,5]                       == False&lt;br /&gt;
--    esCuadratica [3,4,8,17,33,58,94,45,-19,-100] == True&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
esCuadratica :: [Int] -&amp;gt; Bool&lt;br /&gt;
esCuadratica xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.1. Definir las funciones  &lt;br /&gt;
--    ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
-- tales que&lt;br /&gt;
-- * (ultima n) es la última cifra del número natural n y&lt;br /&gt;
-- * (primera n) es la primera cifra del número natural n.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
--    ultima  711 = 1         &lt;br /&gt;
--    primera 711 = 7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultima, primera :: Int -&amp;gt; Int  &lt;br /&gt;
ultima n  = undefined&lt;br /&gt;
primera n = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20.2. Definir la función&lt;br /&gt;
--    encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
-- tal que (encadenadoC xs) se verifica si xs es una lista de enteros&lt;br /&gt;
-- positivos encadenados (es decir, la última cifra de cada número&lt;br /&gt;
-- coincide con la primera del siguiente en la lista). Por ejemplo,&lt;br /&gt;
--   encadenadoC [711,1024,413,367]  ==  True&lt;br /&gt;
--   encadenadoC [711,1024,213,367]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
encadenadoC :: [Int] -&amp;gt; Bool&lt;br /&gt;
encadenadoC xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=202</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=202"/>
		<updated>2021-10-08T07:51:20Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez, Lucía González&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Manuel Fco Moreno, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante,]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Manuel Fco Moreno,Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz, Lucía González&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, José Manuel García&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos, Manuel Fco Moreno&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Manuel Fco Moreno, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresIguales x y z = if x == y &amp;amp;&amp;amp; x == z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Manuel Fco Moreno&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresDiferentes x y z = if x /= y &amp;amp;&amp;amp; x /= z &amp;amp;&amp;amp; y /= z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz, Adolfo Sagrera Vivancos, Manuel Fco Moreno, Adriana Gordillo, Irene Ortega&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Irene Ortega&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández, Irene Ortega&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs)))&lt;br /&gt;
-- Manuel Fco Moreno&lt;br /&gt;
segundoMinimo xs = last (take 2 (sort(nub xs)))&lt;br /&gt;
--Pelayo Infante, Lucía González&lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
segundoMinimo xs = minimum (drop 1(sort(nub xs))) &lt;br /&gt;
--José Manuel García&lt;br /&gt;
segundoMinimo xs = minimum (delete (minimum js) js)&lt;br /&gt;
                   where js = nub xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González, Manuel Fco Moreno&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
kMaximo k xs = maximum(drop (k-1)(reverse(sort(nub xs))))&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
kMaximo k xs = head(drop (k-1) (reverse(sort(nub xs))))&lt;br /&gt;
--José Manuel García&lt;br /&gt;
kMaximo k xs = head (js \\ (take (k-1) js))&lt;br /&gt;
              where js = reverse (sort (nub xs))&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
kMaximo k xs = sort(nub xs) !! ((length (nub(xs))) - k)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Manuel Fco Moreno, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez, Lucía González, Adolfo Sagrera Vivancos, Irene Ortega&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz, José Manuel García&lt;br /&gt;
numPermut xs = product [1..(length xs)]&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
numPermut xs = length (permutations(nub xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
--Lucía González, Manuel Fco Moreno&lt;br /&gt;
numPares xs =  length (filter even (nub xs))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=201</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=201"/>
		<updated>2021-10-08T07:50:31Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez, Lucía González&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Manuel Fco Moreno, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante,]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Manuel Fco Moreno,Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz, Lucía González&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, José Manuel García&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos, Manuel Fco Moreno&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Manuel Fco Moreno, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresIguales x y z = if x == y &amp;amp;&amp;amp; x == z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Manuel Fco Moreno&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresDiferentes x y z = if x /= y &amp;amp;&amp;amp; x /= z &amp;amp;&amp;amp; y /= z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz, Adolfo Sagrera Vivancos, Manuel Fco Moreno, Adriana Gordillo, Irene Ortega&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Irene Ortega&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández, Irene Ortega&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs)))&lt;br /&gt;
-- Manuel Fco Moreno&lt;br /&gt;
segundoMinimo xs = last (take 2 (sort(nub xs)))&lt;br /&gt;
--Pelayo Infante, Lucía González&lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
segundoMinimo xs = minimum (drop 1(sort(nub xs))) &lt;br /&gt;
--José Manuel García&lt;br /&gt;
segundoMinimo xs = minimum (delete (minimum js) js)&lt;br /&gt;
                   where js = nub xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González, Manuel Fco Moreno&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
kMaximo k xs = maximum(drop (k-1)(reverse(sort(nub xs))))&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
kMaximo k xs = head(drop (k-1) (reverse(sort(nub xs))))&lt;br /&gt;
--José Manuel García&lt;br /&gt;
kMaximo k xs = head (js \\ (take (k-1) js))&lt;br /&gt;
              where js = reverse (sort (nub xs))&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
kMaximo k xs = sort(nub xs) !! ((length nub(xs)) - k)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Manuel Fco Moreno, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez, Lucía González, Adolfo Sagrera Vivancos, Irene Ortega&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz, José Manuel García&lt;br /&gt;
numPermut xs = product [1..(length xs)]&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
numPermut xs = length (permutations(nub xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
--Lucía González, Manuel Fco Moreno&lt;br /&gt;
numPares xs =  length (filter even (nub xs))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=200</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=200"/>
		<updated>2021-10-08T07:47:24Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez, Lucía González&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Manuel Fco Moreno, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante,]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Manuel Fco Moreno,Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz, Lucía González&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, José Manuel García&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos, Manuel Fco Moreno&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Manuel Fco Moreno, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresIguales x y z = if x == y &amp;amp;&amp;amp; x == z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Manuel Fco Moreno&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
tresDiferentes x y z = if x /= y &amp;amp;&amp;amp; x /= z &amp;amp;&amp;amp; y /= z then True else False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz, Adolfo Sagrera Vivancos, Manuel Fco Moreno, Adriana Gordillo, Irene Ortega&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- José Manuel García&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Irene Ortega&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández, Irene Ortega&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs)))&lt;br /&gt;
-- Manuel Fco Moreno&lt;br /&gt;
segundoMinimo xs = last (take 2 (sort(nub xs)))&lt;br /&gt;
--Pelayo Infante, Lucía González&lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
segundoMinimo xs = minimum (drop 1(sort(nub xs))) &lt;br /&gt;
--José Manuel García&lt;br /&gt;
segundoMinimo xs = minimum (delete (minimum js) js)&lt;br /&gt;
                   where js = nub xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez, Lucía González, Manuel Fco Moreno&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
kMaximo k xs = maximum(drop (k-1)(reverse(sort(nub xs))))&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
kMaximo k xs = head(drop (k-1) (reverse(sort(nub xs))))&lt;br /&gt;
--José Manuel García&lt;br /&gt;
kMaximo k xs = head (js \\ (take (k-1) js))&lt;br /&gt;
              where js = reverse (sort (nub xs))&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
kMaximo k xs = sort(nub xs) !! ((length xs) - k)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Manuel Fco Moreno, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez, Lucía González, Adolfo Sagrera Vivancos, Irene Ortega&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz, José Manuel García&lt;br /&gt;
numPermut xs = product [1..(length xs)]&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
numPermut xs = length (permutations(nub xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
--Lucía González, Manuel Fco Moreno&lt;br /&gt;
numPares xs =  length (filter even (nub xs))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=142</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=142"/>
		<updated>2021-10-06T08:08:28Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez, Lucía González&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
segmento m n xs = drop(m-1) (reverse a)&lt;br /&gt;
 where a=  drop(length xs-n)(reverse xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs))) &lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
numPermut xs = product [1..(length xs)]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=141</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=141"/>
		<updated>2021-10-06T07:52:52Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez, Lucía González&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
segmento m n xs = drop(m-1) (reverse a)&lt;br /&gt;
 where a=  drop(length xs-n)(reverse xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs))) &lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=139</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=139"/>
		<updated>2021-10-06T07:45:02Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, Lucía González&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
segmento m n xs = drop(m-1) (reverse a)&lt;br /&gt;
 where a=  drop(length xs-n)(reverse xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
tresDiferentes x y z = not(x==y || x==z || z==y)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs))) &lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=138</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=138"/>
		<updated>2021-10-06T07:40:06Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, Lucía González&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
segmento m n xs = drop(m-1) (reverse a)&lt;br /&gt;
 where a=  drop(length xs-n)(reverse xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Adolfo Sagrera Vivancos, Nicolás Rodríguez Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez, Nicolás Rodríguez Ruiz&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs))) &lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=137</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=137"/>
		<updated>2021-10-06T07:35:19Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán, José Manuel García, Elsa Domínguez&lt;br /&gt;
maxTres x y z = max (max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
palindromo xs = if xs==reverse xs&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
--José Manuel García&lt;br /&gt;
interior xs = reverse (take ((length js)-1) js)&lt;br /&gt;
         where js = reverse (take ((length xs)-1) xs)&lt;br /&gt;
--Nicolás Rodríguez Ruiz&lt;br /&gt;
interior xs = reverse(tail(reverse(tail xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, Lucía González&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández, Adolfo Sagrera Vivancos&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse xs&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez, Adolfo Sagrera Vivancos&lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández, José Manuel García&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
--Manuel Alcaide García, Irene Ortega&lt;br /&gt;
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
segmento m n xs = drop(m-1) (reverse a)&lt;br /&gt;
 where a=  drop(length xs-n)(reverse xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo, Adolfo Sagrera Vivancos&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez&lt;br /&gt;
extremos n xs = take n xs  ++  drop (length xs-n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo, Irene Ortega&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
-- Adriana Gordillo, Elsa Domínguez, Adolfo Sagrera Vivancos&lt;br /&gt;
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]&lt;br /&gt;
-- Iván García Rodríguez&lt;br /&gt;
mediano x y z = max x a where a=min y z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
--Pelayo Infante&lt;br /&gt;
tresIguales x y z = x^3==x*y*z&lt;br /&gt;
--Iván García Rodríguez&lt;br /&gt;
tresIguales x y z = if x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
  then &amp;quot;True&amp;quot;&lt;br /&gt;
  else &amp;quot;False&amp;quot;&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; y==z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
--Irene Ortega&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z &amp;amp;&amp;amp; y/=x&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; y/=z &amp;amp;&amp;amp; x/=z&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
cuatroIguales x y z u = x==y &amp;amp;&amp;amp; y==z &amp;amp;&amp;amp; z==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
-- Adriana Gordillo&lt;br /&gt;
segundoMinimo xs = minimum (filter (&amp;gt;minimum xs) xs)&lt;br /&gt;
-- Elsa Domínguez&lt;br /&gt;
segundoMinimo xs = head (tail(nub (sort xs))) &lt;br /&gt;
--Pelayo Infante &lt;br /&gt;
segundoMinimo xs = head ( drop 1 (sort (nub xs)))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
--Fernando Ruiz Mazo&lt;br /&gt;
kMaximoRecursivo k xs = if k==1 then maximum(nub(xs)) else kMaximoRecursivo (k-1) (init(sort(nub xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=100</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=100"/>
		<updated>2021-09-29T08:43:23Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = undefined&lt;br /&gt;
-- Miguel Ángel Martínez&lt;br /&gt;
media3 x y z = .sdfsdfadf&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Virginia Sánchez, Carmen Blanco&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaMonedas a b c d e = undefined&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
volumenEsfera r = undefined &lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Carmen Blanco&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo INfante , Francisco José Espinosa&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, César Fornis Catalán&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González, Carmen Blanco&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
--César Fornis Catalán&lt;br /&gt;
maxTres x y z = max(max x y) z&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
--Manuel Alcaide García&lt;br /&gt;
interior xs = init (drop 1 xs)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Alcaide García&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse XS&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García &lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segmento m n xs = take (n-m+1)(drop(m-1) xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- Fernando Ruiz Mazo&lt;br /&gt;
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
--Antonio Medinilla Garófano&lt;br /&gt;
quitarMaximo xs = delete (maximum xs) xs&lt;br /&gt;
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, José Manuel Sánchez Parra&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
numPares xs = length(fst(partition even (nub xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=87</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=87"/>
		<updated>2021-09-29T08:18:35Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = undefined&lt;br /&gt;
-- Miguel Ángel Martínez&lt;br /&gt;
media3 x y z = .sdfsdfadf&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Virginia Sánchez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, Carmen Blanco, César Fornis Catalán&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaMonedas a b c d e = undefined&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
volumenEsfera r = undefined &lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Carmen Blanco, Irene Ortega&lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- César Fornis Catalán, Virginia Sánchez&lt;br /&gt;
volumenEsfera r = (4*pi*r^3)/3&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo INfante , Francisco José Espinosa&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- Virginia Sánchez&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Irene Ortega&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse XS&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García &lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- Fernando Ruiz &lt;br /&gt;
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
--José Manuel Sánchez Parra&lt;br /&gt;
kMaximo k xs = maximum(take k xs)&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=65</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=65"/>
		<updated>2021-09-29T07:49:57Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = undefined&lt;br /&gt;
-- Miguel Ángel Martínez&lt;br /&gt;
media3 x y z = .sdfsdfadf&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García, Carmen Blanco&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaMonedas a b c d e = undefined&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Laura Arango, Ana Sosa Caballero&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Antonio López García, Irene Ortega&lt;br /&gt;
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa&lt;br /&gt;
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20&lt;br /&gt;
-- Carmen Blanco&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
volumenEsfera r = undefined &lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante &lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- Adolfo Sagrera Vivancos, Irene Ortega&lt;br /&gt;
volumenEsfera r =(4/3)*(pi*r^3)&lt;br /&gt;
-- Carmen Blanco &lt;br /&gt;
volumenEsfera r = pi*(r^3)*4/3&lt;br /&gt;
-- Francisco José Espinosa&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
--Álvaro Cano, Ana Sosa Caballero&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1&lt;br /&gt;
                             where areaCirculo r = pi*r^2&lt;br /&gt;
--Adolfo Sagrera Vivancos, Pelayo INfante , Francisco José Espinosa&lt;br /&gt;
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos&lt;br /&gt;
maxTres x y z = max x t&lt;br /&gt;
                where t = max y z&lt;br /&gt;
&lt;br /&gt;
-- Antonio López García, Lucía González&lt;br /&gt;
maxTres x y z = maximum [x,y,z]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero &lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
rota1 xs = drop 1 xs ++ take 1 xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
&lt;br /&gt;
-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)&lt;br /&gt;
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández, Laura Arango&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum XS]&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García&lt;br /&gt;
rango xs = [minimum xs, maximum xs]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García&lt;br /&gt;
palindromo xs = xs == reverse xs&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Lucía Hernández, Ana Sosa Caballero&lt;br /&gt;
interior xs = tail (init xs)&lt;br /&gt;
--Laura Arango&lt;br /&gt;
interior xs = drop 1 (init xs)&lt;br /&gt;
--Fernando Ruiz, Antonio López García&lt;br /&gt;
interior xs = init (tail xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
--Álvaro Cano&lt;br /&gt;
finales n xs = drop n xs&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
finales n xs = reverse (take n (reverse xs))&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
finales n xs = drop m xs&lt;br /&gt;
               where m = length xs - n&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
finales n xs = drop (length xs - n) xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
segmento m n xs = drop (m-1) (reverse (drop a ys))&lt;br /&gt;
                  where a  = length xs - n&lt;br /&gt;
                        ys = reverse XS&lt;br /&gt;
-- Ana Sosa Caballero, Antonio López García &lt;br /&gt;
segmento m n xs = drop (m-1) (take n xs)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
extremos n xs = take n xs ++ finales n XS&lt;br /&gt;
-- Ana Sosa Caballero, Lucía Hernández&lt;br /&gt;
extremos n xs = take n xs ++ reverse (take n (reverse xs))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
--Laura Arango&lt;br /&gt;
 mediano x y z = max x (min y z)&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
mediano x y z = minimum [maximum [x,y], z]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero, Lucía Hernández&lt;br /&gt;
tresIguales x y z = x==y &amp;amp;&amp;amp; x==z&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
tresDiferentes x y z = x/=y &amp;amp;&amp;amp; x/=z&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
tresDiferentes x y z = and [x/=y, y/=z, x/=z]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z == True &amp;amp;&amp;amp; x==u&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
cuatroIguales x y z u = tresIguales x y z &amp;amp;&amp;amp; x==u&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Lucía Hernández&lt;br /&gt;
unicos xs = length (nub xs)&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
unicos xs = length(group(sort xs))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
segundoMinimo xs = sort (nub xs) !! 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango, Ana Sosa Caballero&lt;br /&gt;
numPermut xs = length (permutations xs)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Laura Arango&lt;br /&gt;
numPares xs = length (nub (filter even xs))&lt;br /&gt;
-- Ana Sosa Caballero&lt;br /&gt;
numPares xs = length(group (sort (filter even xs)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=25</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=25"/>
		<updated>2021-09-24T08:32:12Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = undefined&lt;br /&gt;
-- Miguel Ángel Martínez&lt;br /&gt;
media3 x y z = .sdfsdfadf&lt;br /&gt;
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaMonedas a b c d e = undefined&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández&lt;br /&gt;
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
volumenEsfera r = undefined &lt;br /&gt;
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz&lt;br /&gt;
 volumenEsfera r = (4/3)*pi*r^3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
maxTres x y z = max(max x y)(z)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--Lucía Hernández&lt;br /&gt;
rota1 xs = tail xs ++ [head xs]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
rota n xs = drop n xs ++ take n xs&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Lucía Hernández&lt;br /&gt;
rango xs = [minimum xs] ++ [maximum xs]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
palindromo xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interior xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
finales n xs = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
segmento m n xs = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
extremos n xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
mediano x y z = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
tresIguales x y z = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
tresDiferentes x y z = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuatroIguales x y z u = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
unicos xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
segundoMinimo xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
kMaximo k xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numPermut xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numPares xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=19</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Relaci%C3%B3n_1&amp;diff=19"/>
		<updated>2021-09-24T08:19:37Z</updated>

		<summary type="html">&lt;p&gt;Nicrodrui: &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_1.hs (24 de septiembre de 2021)&lt;br /&gt;
-- Definiciones por composición sobre números, listas y booleanos. &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;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- En esta relación se plantean ejercicios con definiciones de funciones &lt;br /&gt;
-- por composición sobre números, listas y booleanos.&lt;br /&gt;
-- &lt;br /&gt;
-- Para solucionar los ejercicios puede ser útil el manual de&lt;br /&gt;
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su&lt;br /&gt;
-- resumen en http://bit.ly/ZwSMHO&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = undefined&lt;br /&gt;
-- Miguel Ángel Martínez&lt;br /&gt;
media3 x y z = .sdfsdfadf&lt;br /&gt;
-- Manuel Alcaide García&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
-- Antonio López García&lt;br /&gt;
media3 x y z = (sum [x,y,z])/3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función sumaMonedas tal que &lt;br /&gt;
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a &lt;br /&gt;
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y&lt;br /&gt;
-- e de 20 euros. Por ejemplo,&lt;br /&gt;
--    sumaMonedas 0 0 0 0 1  ==  20&lt;br /&gt;
--    sumaMonedas 0 0 8 0 3  == 100&lt;br /&gt;
--    sumaMonedas 1 1 1 1 1  ==  38&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaMonedas a b c d e = undefined&lt;br /&gt;
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz&lt;br /&gt;
let sumamonedas a b c d e = a+b*2+c*5+d*10+e*20&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función volumenEsfera tal que &lt;br /&gt;
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,&lt;br /&gt;
--    volumenEsfera 10  ==  4188.790204786391&lt;br /&gt;
-- Indicación: Usar la constante pi.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
volumenEsfera r = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que &lt;br /&gt;
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de&lt;br /&gt;
-- radio interior r1 y radio exterior r2. Por ejemplo,&lt;br /&gt;
--    areaDeCoronaCircular 1 2 == 9.42477796076938&lt;br /&gt;
--    areaDeCoronaCircular 2 5 == 65.97344572538566&lt;br /&gt;
--    areaDeCoronaCircular 3 5 == 50.26548245743669&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
areaDeCoronaCircular r1 r2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- Indicación: Usar la función rem&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es&lt;br /&gt;
-- el máximo de x, y y z. Por ejemplo,&lt;br /&gt;
--    maxTres 6 2 4  ==  6&lt;br /&gt;
--    maxTres 6 7 4  ==  7&lt;br /&gt;
--    maxTres 6 7 9  ==  9&lt;br /&gt;
-- Indicación: Usar la función max.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
maxTres x y z = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista&lt;br /&gt;
-- obtenida poniendo el primer elemento de xs al final de la lista. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    rota1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota1 xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la&lt;br /&gt;
-- lista formada por el menor y mayor elemento de xs.&lt;br /&gt;
--    rango [3,2,7,5]  ==  [2,7]&lt;br /&gt;
-- Indicación: Se pueden usar minimum y maximum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rango xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se&lt;br /&gt;
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de&lt;br /&gt;
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,&lt;br /&gt;
--    palindromo [3,2,5,2,3]    ==  True&lt;br /&gt;
--    palindromo [3,2,5,6,2,3]  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
palindromo xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la&lt;br /&gt;
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,&lt;br /&gt;
--    interior [2,5,3,7,3]  ==  [5,3,7]&lt;br /&gt;
--    interior [2..7]       ==  [3,4,5,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
interior xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la&lt;br /&gt;
-- lista formada por los n finales elementos de xs. Por ejemplo,&lt;br /&gt;
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
finales n xs = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es&lt;br /&gt;
-- la lista de los elementos de xs comprendidos entre las posiciones m y&lt;br /&gt;
-- n. Por ejemplo,&lt;br /&gt;
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]&lt;br /&gt;
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]&lt;br /&gt;
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
segmento m n xs = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es&lt;br /&gt;
-- la lista formada por los n primeros elementos de xs y los n finales&lt;br /&gt;
-- elementos de xs. Por ejemplo, &lt;br /&gt;
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
extremos n xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el&lt;br /&gt;
-- número mediano de los tres números x, y y z. Por ejemplo,&lt;br /&gt;
--    mediano 3 2 5  ==  3&lt;br /&gt;
--    mediano 2 4 5  ==  4&lt;br /&gt;
--    mediano 2 6 5  ==  5&lt;br /&gt;
--    mediano 2 6 6  ==  6&lt;br /&gt;
-- Indicación: Usar maximum y minimum.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
mediano x y z = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 16. Definir la función tresIguales tal que &lt;br /&gt;
-- (tresIguales x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    tresIguales 4 4 4  ==  True&lt;br /&gt;
--    tresIguales 4 3 4  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
tresIguales x y z = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 17. Definir la función tresDiferentes tal que &lt;br /&gt;
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son&lt;br /&gt;
-- distintos. Por ejemplo, &lt;br /&gt;
--    tresDiferentes 3 5 2  ==  True&lt;br /&gt;
--    tresDiferentes 3 5 3  ==  False&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
tresDiferentes x y z = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 18. Definir la función cuatroIguales tal que &lt;br /&gt;
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son&lt;br /&gt;
-- iguales. Por ejemplo, &lt;br /&gt;
--    cuatroIguales 5 5 5 5   ==  True&lt;br /&gt;
--    cuatroIguales 5 5 4 5   ==  False&lt;br /&gt;
-- Indicación: Usar la función tresIguales.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuatroIguales x y z u = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicios para trabajar con Data.List. Ver:&lt;br /&gt;
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)&lt;br /&gt;
-- devuelva la cantidad de elementos únicos que hay en la lista xs.&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    unicos [1,4,8,2,1,4,6,1]  == 5 &lt;br /&gt;
--    unicos [10,9,8,10,5,10]  == 4&lt;br /&gt;
--    unicos [10,9,8]  == 3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
unicos xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)&lt;br /&gt;
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando &lt;br /&gt;
-- repeticiones. Por ejemplo, &lt;br /&gt;
--    segundoMinimo [6,9,2,4]  ==  4&lt;br /&gt;
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
segundoMinimo xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) &lt;br /&gt;
-- devuelve el k-máximo elemento de xs (es decir, el que está en la&lt;br /&gt;
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, &lt;br /&gt;
--    kMaximo 2 [6,9,2,4]  == 6&lt;br /&gt;
--    kMaximo 3 [10,9,8,10,5]  == 8&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
kMaximo k xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) &lt;br /&gt;
-- devuelve el número de permutaciones sin repetición posibles con los&lt;br /&gt;
-- elementos de la lista xs. Por ejemplo, &lt;br /&gt;
--    numPermut [6,2,4]  == 6&lt;br /&gt;
--    numPermut [10,8,10,5]  == 24&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numPermut xs = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)&lt;br /&gt;
-- devuelva cuantos números pares en total (sin repeticiones) aparecen&lt;br /&gt;
-- en la lista xs. Por ejemplo, &lt;br /&gt;
--    numPares [1,4,8,2,1,4,6,1]  == 4&lt;br /&gt;
--    numPares [10,9,8,10,5,10]  == 2&lt;br /&gt;
--    numPares [10,9,8]  == 2&lt;br /&gt;
-- Indicación: puede ser útil la función partitions&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numPares xs = undefined&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicrodrui</name></author>
	</entry>
</feed>