Diferencia entre revisiones de «Relación 8»
De Informática de 1º de Matemáticas [Curso 2021-22, Grupo 3]
(Página blanqueada) Etiqueta: Vaciado |
|||
Línea 1: | Línea 1: | ||
<source lang='haskell'> | |||
-- I1M 2021-22 | |||
-- Funciones sobre cadenas. | |||
-- Departamento de Ciencias de la Computación e I.A. | |||
-- Universidad de Sevilla | |||
-- ===================================================================== | |||
-- --------------------------------------------------------------------- | |||
-- Importación de librerías auxiliares -- | |||
-- --------------------------------------------------------------------- | |||
import Data.Char | |||
import Data.List | |||
import Test.QuickCheck | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 1.1. Definir, por comprensión, la función | |||
-- sumaDigitosC :: String -> Int | |||
-- tal que (sumaDigitosC xs) es la suma de los dígitos de la cadena | |||
-- xs. Por ejemplo, | |||
-- sumaDigitosC "SE 2431 X" == 10 | |||
-- Nota: Usar las funciones (isDigit c) que se verifica si el carácter c | |||
-- es un dígito y (digitToInt d) que es el entero correspondiente al | |||
-- dígito d. | |||
-- --------------------------------------------------------------------- | |||
sumaDigitosC :: String -> Int | |||
sumaDigitosC xs = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 1.2. Definir, por recursión, la función | |||
-- sumaDigitosR :: String -> Int | |||
-- tal que (sumaDigitosR xs) es la suma de los dígitos de la cadena | |||
-- xs. Por ejemplo, | |||
-- sumaDigitosR "SE 2431 X" == 10 | |||
-- Nota: Usar las funciones isDigit y digitToInt. | |||
-- --------------------------------------------------------------------- | |||
sumaDigitosR :: String -> Int | |||
sumaDigitosR = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 1.3. Definir, por orden superior, la función | |||
-- sumaDigitosMF :: String -> Int | |||
-- tal que (sumaDigitosMF xs) es la suma de los dígitos de la cadena | |||
-- xs. Por ejemplo, | |||
-- sumaDigitosMF "SE 2431 X" == 10 | |||
-- Nota: Usar las funciones isDigit y digitToInt. | |||
-- --------------------------------------------------------------------- | |||
sumaDigitosMF :: String -> Int | |||
sumaDigitosMF = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 1.4. Comprobar con QuickCheck que las definiciones son | |||
-- equivalentes. | |||
-- --------------------------------------------------------------------- | |||
-- La propiedad es | |||
prop_sumaDigitos :: String -> Bool | |||
prop_sumaDigitos xs = undefined | |||
-- La comprobación es | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 2.1. Definir, por comprensión, la función | |||
-- mayusculaInicial :: String -> String | |||
-- tal que (mayusculaInicial xs) es la palabra xs con la letra inicial | |||
-- en mayúscula y las restantes en minúsculas. Por ejemplo, | |||
-- mayusculaInicial "sEviLLa" == "Sevilla" | |||
-- mayusculaInicial "" == "" | |||
-- Nota: Usar las funciones (toLower c) que es el carácter c en | |||
-- minúscula y (toUpper c) que es el carácter c en mayúscula. | |||
-- --------------------------------------------------------------------- | |||
mayusculaInicial :: String -> String | |||
mayusculaInicial = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 2.2. Definir, por recursión, la función | |||
-- mayusculaInicialRec :: String -> String | |||
-- tal que (mayusculaInicialRec xs) es la palabra xs con la letra | |||
-- inicial en mayúscula y las restantes en minúsculas. Por ejemplo, | |||
-- mayusculaInicialRec "sEviLLa" == "Sevilla" | |||
-- mayusculaInicialRec "s" == "S" | |||
-- --------------------------------------------------------------------- | |||
mayusculaInicialRec :: String -> String | |||
mayusculaInicialRec = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 2.3. Definir, por orden superior, la función | |||
-- mayusculaInicialMF :: String -> String | |||
-- tal que (mayusculaInicialMF xs) es la palabra xs con la letra | |||
-- inicial en mayúscula y las restantes en minúsculas. Por ejemplo, | |||
-- mayusculaInicialMF "sEviLLa" == "Sevilla" | |||
-- mayusculaInicialMF "s" == "S" | |||
-- --------------------------------------------------------------------- | |||
mayusculaInicialMF :: String -> String | |||
mayusculaInicialMF = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 2.4. Comprobar con QuickCheck que las definiciones son | |||
-- equivalentes. | |||
-- --------------------------------------------------------------------- | |||
-- La propiedad es | |||
prop_mayusculaInicial :: String -> Bool | |||
prop_mayusculaInicial xs = undefined | |||
-- La comprobación es | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 3.1. Se consideran las siguientes reglas de mayúsculas | |||
-- iniciales para los títulos: | |||
-- * la primera palabra comienza en mayúscula y | |||
-- * todas las palabras que tienen 4 letras como mínimo empiezan | |||
-- con mayúsculas | |||
-- Definir, por comprensión, la función | |||
-- titulo :: [String] -> [String] | |||
-- tal que (titulo ps) es la lista de las palabras de ps con | |||
-- las reglas de mayúsculas iniciales de los títulos. Por ejemplo, | |||
-- ghci> titulo ["eL","arTE","DE","La","proGraMacion"] | |||
-- ["El","Arte","de","la","Programacion"] | |||
-- --------------------------------------------------------------------- | |||
titulo :: [String] -> [String] | |||
titulo = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 3.2. Definir, por recursión, la función | |||
-- tituloRec :: [String] -> [String] | |||
-- tal que (tituloRec ps) es la lista de las palabras de ps con | |||
-- las reglas de mayúsculas iniciales de los títulos. Por ejemplo, | |||
-- ghci> tituloRec ["eL","arTE","DE","La","proGraMacion"] | |||
-- ["El","Arte","de","la","Programacion"] | |||
-- --------------------------------------------------------------------- | |||
tituloRec :: [String] -> [String] | |||
tituloRec = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 3.3. Comprobar con QuickCheck que ambas definiciones son | |||
-- equivalentes. | |||
-- --------------------------------------------------------------------- | |||
-- La propiedad es | |||
prop_titulo :: [String] -> Bool | |||
prop_titulo xs = undefined | |||
-- La comprobación es | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 4.1. Definir, por comprensión, la función | |||
-- posiciones :: String -> Char -> [Int] | |||
-- tal que (posiciones xs y) es la lista de la posiciones del carácter y | |||
-- en la cadena xs. Por ejemplo, | |||
-- posiciones "Salamanca" 'a' == [1,3,5,8] | |||
-- --------------------------------------------------------------------- | |||
posiciones :: String -> Char -> [Int] | |||
posiciones xs y = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 4.2. Definir, por recursión, la función | |||
-- posicionesR :: String -> Char -> [Int] | |||
-- tal que (posicionesR xs y) es la lista de la posiciones del | |||
-- carácter y en la cadena xs. Por ejemplo, | |||
-- posicionesR "Salamanca" 'a' == [1,3,5,8] | |||
-- --------------------------------------------------------------------- | |||
posicionesR :: String -> Char -> [Int] | |||
posicionesR xs y = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 4.3. Comprobar con QuickCheck que ambas definiciones son | |||
-- equivalentes. | |||
-- --------------------------------------------------------------------- | |||
-- La propiedad es | |||
prop_posiciones :: String -> Char -> Bool | |||
prop_posiciones xs y = undefined | |||
-- La comprobación es | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 5.1. Definir, por recursión, la función | |||
-- contieneR :: String -> String -> Bool | |||
-- tal que (contieneR xs ys) se verifica si ys es una subcadena de | |||
-- xs. Por ejemplo, | |||
-- contieneR "escasamente" "casa" == True | |||
-- contieneR "escasamente" "cante" == False | |||
-- contieneR "" "" == True | |||
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica | |||
-- si ys es un prefijo de xs. | |||
-- --------------------------------------------------------------------- | |||
contieneR :: String -> String -> Bool | |||
contieneR = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 5.2. Definir, por comprensión, la función | |||
-- contieneC :: String -> String -> Bool | |||
-- tal que (contiene xs ys) se verifica si ys es una subcadena de | |||
-- xs. Por ejemplo, | |||
-- contieneC "escasamente" "casa" == True | |||
-- contieneC "escasamente" "cante" == False | |||
-- contieneC "casado y casada" "casa" == True | |||
-- contieneC "" "" == True | |||
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica | |||
-- si ys es un prefijo de xs. | |||
-- --------------------------------------------------------------------- | |||
contieneC :: String -> String -> Bool | |||
contieneC xs ys = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 5.2. Definir, por orden superior, la función | |||
-- contiene :: String -> String -> Bool | |||
-- tal que (contiene xs ys) se verifica si ys es una subcadena de | |||
-- xs. Por ejemplo, | |||
-- contiene "escasamente" "casa" == True | |||
-- contiene "escasamente" "cante" == False | |||
-- contiene "casado y casada" "casa" == True | |||
-- contiene "" "" == True | |||
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica | |||
-- si ys es un prefijo de xs. | |||
-- --------------------------------------------------------------------- | |||
contiene :: String -> String -> Bool | |||
contiene xs ys = undefined | |||
-- --------------------------------------------------------------------- | |||
-- Ejercicio 5.3. Comprobar con QuickCheck que las definiciones son | |||
-- equivalentes. | |||
-- --------------------------------------------------------------------- | |||
-- La propiedad es | |||
prop_contiene :: String -> String -> Bool | |||
prop_contiene xs ys = undefined | |||
-- La comprobación es | |||
</source> |
Revisión del 11:28 3 dic 2021
-- I1M 2021-22
-- Funciones sobre cadenas.
-- Departamento de Ciencias de la Computación e I.A.
-- Universidad de Sevilla
-- =====================================================================
-- ---------------------------------------------------------------------
-- Importación de librerías auxiliares --
-- ---------------------------------------------------------------------
import Data.Char
import Data.List
import Test.QuickCheck
-- ---------------------------------------------------------------------
-- Ejercicio 1.1. Definir, por comprensión, la función
-- sumaDigitosC :: String -> Int
-- tal que (sumaDigitosC xs) es la suma de los dígitos de la cadena
-- xs. Por ejemplo,
-- sumaDigitosC "SE 2431 X" == 10
-- Nota: Usar las funciones (isDigit c) que se verifica si el carácter c
-- es un dígito y (digitToInt d) que es el entero correspondiente al
-- dígito d.
-- ---------------------------------------------------------------------
sumaDigitosC :: String -> Int
sumaDigitosC xs = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 1.2. Definir, por recursión, la función
-- sumaDigitosR :: String -> Int
-- tal que (sumaDigitosR xs) es la suma de los dígitos de la cadena
-- xs. Por ejemplo,
-- sumaDigitosR "SE 2431 X" == 10
-- Nota: Usar las funciones isDigit y digitToInt.
-- ---------------------------------------------------------------------
sumaDigitosR :: String -> Int
sumaDigitosR = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 1.3. Definir, por orden superior, la función
-- sumaDigitosMF :: String -> Int
-- tal que (sumaDigitosMF xs) es la suma de los dígitos de la cadena
-- xs. Por ejemplo,
-- sumaDigitosMF "SE 2431 X" == 10
-- Nota: Usar las funciones isDigit y digitToInt.
-- ---------------------------------------------------------------------
sumaDigitosMF :: String -> Int
sumaDigitosMF = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 1.4. Comprobar con QuickCheck que las definiciones son
-- equivalentes.
-- ---------------------------------------------------------------------
-- La propiedad es
prop_sumaDigitos :: String -> Bool
prop_sumaDigitos xs = undefined
-- La comprobación es
-- ---------------------------------------------------------------------
-- Ejercicio 2.1. Definir, por comprensión, la función
-- mayusculaInicial :: String -> String
-- tal que (mayusculaInicial xs) es la palabra xs con la letra inicial
-- en mayúscula y las restantes en minúsculas. Por ejemplo,
-- mayusculaInicial "sEviLLa" == "Sevilla"
-- mayusculaInicial "" == ""
-- Nota: Usar las funciones (toLower c) que es el carácter c en
-- minúscula y (toUpper c) que es el carácter c en mayúscula.
-- ---------------------------------------------------------------------
mayusculaInicial :: String -> String
mayusculaInicial = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 2.2. Definir, por recursión, la función
-- mayusculaInicialRec :: String -> String
-- tal que (mayusculaInicialRec xs) es la palabra xs con la letra
-- inicial en mayúscula y las restantes en minúsculas. Por ejemplo,
-- mayusculaInicialRec "sEviLLa" == "Sevilla"
-- mayusculaInicialRec "s" == "S"
-- ---------------------------------------------------------------------
mayusculaInicialRec :: String -> String
mayusculaInicialRec = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 2.3. Definir, por orden superior, la función
-- mayusculaInicialMF :: String -> String
-- tal que (mayusculaInicialMF xs) es la palabra xs con la letra
-- inicial en mayúscula y las restantes en minúsculas. Por ejemplo,
-- mayusculaInicialMF "sEviLLa" == "Sevilla"
-- mayusculaInicialMF "s" == "S"
-- ---------------------------------------------------------------------
mayusculaInicialMF :: String -> String
mayusculaInicialMF = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 2.4. Comprobar con QuickCheck que las definiciones son
-- equivalentes.
-- ---------------------------------------------------------------------
-- La propiedad es
prop_mayusculaInicial :: String -> Bool
prop_mayusculaInicial xs = undefined
-- La comprobación es
-- ---------------------------------------------------------------------
-- Ejercicio 3.1. Se consideran las siguientes reglas de mayúsculas
-- iniciales para los títulos:
-- * la primera palabra comienza en mayúscula y
-- * todas las palabras que tienen 4 letras como mínimo empiezan
-- con mayúsculas
-- Definir, por comprensión, la función
-- titulo :: [String] -> [String]
-- tal que (titulo ps) es la lista de las palabras de ps con
-- las reglas de mayúsculas iniciales de los títulos. Por ejemplo,
-- ghci> titulo ["eL","arTE","DE","La","proGraMacion"]
-- ["El","Arte","de","la","Programacion"]
-- ---------------------------------------------------------------------
titulo :: [String] -> [String]
titulo = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 3.2. Definir, por recursión, la función
-- tituloRec :: [String] -> [String]
-- tal que (tituloRec ps) es la lista de las palabras de ps con
-- las reglas de mayúsculas iniciales de los títulos. Por ejemplo,
-- ghci> tituloRec ["eL","arTE","DE","La","proGraMacion"]
-- ["El","Arte","de","la","Programacion"]
-- ---------------------------------------------------------------------
tituloRec :: [String] -> [String]
tituloRec = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 3.3. Comprobar con QuickCheck que ambas definiciones son
-- equivalentes.
-- ---------------------------------------------------------------------
-- La propiedad es
prop_titulo :: [String] -> Bool
prop_titulo xs = undefined
-- La comprobación es
-- ---------------------------------------------------------------------
-- Ejercicio 4.1. Definir, por comprensión, la función
-- posiciones :: String -> Char -> [Int]
-- tal que (posiciones xs y) es la lista de la posiciones del carácter y
-- en la cadena xs. Por ejemplo,
-- posiciones "Salamanca" 'a' == [1,3,5,8]
-- ---------------------------------------------------------------------
posiciones :: String -> Char -> [Int]
posiciones xs y = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 4.2. Definir, por recursión, la función
-- posicionesR :: String -> Char -> [Int]
-- tal que (posicionesR xs y) es la lista de la posiciones del
-- carácter y en la cadena xs. Por ejemplo,
-- posicionesR "Salamanca" 'a' == [1,3,5,8]
-- ---------------------------------------------------------------------
posicionesR :: String -> Char -> [Int]
posicionesR xs y = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 4.3. Comprobar con QuickCheck que ambas definiciones son
-- equivalentes.
-- ---------------------------------------------------------------------
-- La propiedad es
prop_posiciones :: String -> Char -> Bool
prop_posiciones xs y = undefined
-- La comprobación es
-- ---------------------------------------------------------------------
-- Ejercicio 5.1. Definir, por recursión, la función
-- contieneR :: String -> String -> Bool
-- tal que (contieneR xs ys) se verifica si ys es una subcadena de
-- xs. Por ejemplo,
-- contieneR "escasamente" "casa" == True
-- contieneR "escasamente" "cante" == False
-- contieneR "" "" == True
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica
-- si ys es un prefijo de xs.
-- ---------------------------------------------------------------------
contieneR :: String -> String -> Bool
contieneR = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 5.2. Definir, por comprensión, la función
-- contieneC :: String -> String -> Bool
-- tal que (contiene xs ys) se verifica si ys es una subcadena de
-- xs. Por ejemplo,
-- contieneC "escasamente" "casa" == True
-- contieneC "escasamente" "cante" == False
-- contieneC "casado y casada" "casa" == True
-- contieneC "" "" == True
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica
-- si ys es un prefijo de xs.
-- ---------------------------------------------------------------------
contieneC :: String -> String -> Bool
contieneC xs ys = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 5.2. Definir, por orden superior, la función
-- contiene :: String -> String -> Bool
-- tal que (contiene xs ys) se verifica si ys es una subcadena de
-- xs. Por ejemplo,
-- contiene "escasamente" "casa" == True
-- contiene "escasamente" "cante" == False
-- contiene "casado y casada" "casa" == True
-- contiene "" "" == True
-- Nota: Se puede usar la predefinida (isPrefixOf ys xs) que se verifica
-- si ys es un prefijo de xs.
-- ---------------------------------------------------------------------
contiene :: String -> String -> Bool
contiene xs ys = undefined
-- ---------------------------------------------------------------------
-- Ejercicio 5.3. Comprobar con QuickCheck que las definiciones son
-- equivalentes.
-- ---------------------------------------------------------------------
-- La propiedad es
prop_contiene :: String -> String -> Bool
prop_contiene xs ys = undefined
-- La comprobación es