SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Tema 5: Definiciones de listas por comprensión
Informática (2013–14)
José A. Alonso Jiménez
Grupo de Lógica Computacional
Departamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
IM Tema 5: Definiciones de listas por comprensión
Tema 5: Definiciones de listas por comprensión
1. Generadores
2. Guardas
3. La función zip
4. Comprensión de cadenas
5. Cifrado César
Codificación y descodificación
Análisis de frecuencias
Descifrado
2 / 29
IM Tema 5: Definiciones de listas por comprensión
Generadores
Definiciones por comprensión
I Definiciones por comprensión en Matemáticas:
{x2 : x ∈ {2, 3, 4, 5}} = {4, 9, 16, 25}
I Definiciones por comprensión en Haskell:
Prelude> [x^2 | x <- [2..5]]
[4,9,16,25]
I La expresión x <- [2..5] se llama un generador.
I Ejemplos con más de un generador:
Prelude> [(x,y) | x <- [1,2,3], y <- [4,5]]
[(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)]
Prelude> [(x,y) | y <- [4,5], x <- [1,2,3]]
[(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)]
3 / 29
IM Tema 5: Definiciones de listas por comprensión
Generadores
Generadores dependientes
I Ejemplo con generadores dependientes:
Prelude> [(x,y) | x <- [1..3], y <- [x..3]]
[(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)]
I (concat xss) es la concatenación de la lista de listas xss. Por
ejemplo,
concat [[1,3],[2,5,6],[4,7]] [1,3,2,5,6,4,7]
Prelude
concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]
4 / 29
IM Tema 5: Definiciones de listas por comprensión
Generadores
Generadores con variables anónimas
I Ejemplo de generador con variable anónima:
(primeros ps) es la lista de los primeros elementos de la lista
de pares ps. Por ejemplo,
primeros [(1,3),(2,5),(6,3)] [1,2,6]
primeros :: [(a, b)] -> [a]
primeros ps = [x | (x,_) <- ps]
I Definición de la longitud por comprensión
Prelude
length :: [a] -> Int
length xs = sum [1 | _ <- xs]
5 / 29
IM Tema 5: Definiciones de listas por comprensión
Guardas
Guardas
I Las listas por comprensión pueden tener guardas para restringir
los valores.
I Ejemplo de guarda:
Prelude> [x | x <- [1..10], even x]
[2,4,6,8,10]
La guarda es even x.
I (factores n) es la lista de los factores del número n. Por
ejemplo,
factores 30 [1,2,3,5,6,10,15,30]
factores :: Int -> [Int]
factores n = [x | x <- [1..n], n `mod` x == 0]
6 / 29
IM Tema 5: Definiciones de listas por comprensión
Guardas
Guardas: Cálculo de primos
I (primo n) se verifica si n es primo. Por ejemplo,
primo 30 False
primo 31 True
primo :: Int -> Bool
primo n = factores n == [1, n]
I (primos n) es la lista de los primos menores o iguales que n.
Por ejemplo,
primos 31 [2,3,5,7,11,13,17,19,23,29,31]
primos :: Int -> [Int]
primos n = [x | x <- [2..n], primo x]
7 / 29
IM Tema 5: Definiciones de listas por comprensión
Guardas
Guarda con igualdad
I Una lista de asociación es una lista de pares formado por una
clave y un valor. Por ejemplo,
[("Juan",7),("Ana",9),("Eva",3)]
I (busca c t) es la lista de los valores de la lista de asociación t
cuyas claves valen c. Por ejemplo,
Prelude> busca 'b' [('a',1),('b',3),('c',5),('b',2)]
[3,2]
busca :: Eq a => a -> [(a, b)] -> [b]
busca c t = [v | (c', v) <- t, c' == c]
8 / 29
IM Tema 5: Definiciones de listas por comprensión
La función zip
La función zip y elementos adyacentes
I (zip xs ys) es la lista obtenida emparejando los elementos de
las listas xs e ys. Por ejemplo,
Prelude> zip ['a','b','c'] [2,5,4,7]
[('a',2),('b',5),('c',4)]
I (adyacentes xs) es la lista de los pares de elementos
adyacentes de la lista xs. Por ejemplo,
adyacentes [2,5,3,7] [(2,5),(5,3),(3,7)]
adyacentes :: [a] -> [(a, a)]
adyacentes xs = zip xs (tail xs)
9 / 29
IM Tema 5: Definiciones de listas por comprensión
La función zip
Las funciones zip, and y listas ordenadas
I (and xs) se verifica si todos los elementos de xs son
verdaderos. Por ejemplo,
and [2 < 3, 2+3 == 5] True
and [2 < 3, 2+3 == 5, 7 < 7] False
I (ordenada xs) se verifica si la lista xs está ordenada. Por
ejemplo,
ordenada [1,3,5,6,7] True
ordenada [1,3,6,5,7] False
ordenada :: Ord a => [a] -> Bool
ordenada xs = and [x <= y | (x,y) <- adyacentes xs]
10 / 29
IM Tema 5: Definiciones de listas por comprensión
La función zip
La función zip y lista de posiciones
I (posiciones x xs) es la lista de las posiciones ocupadas por el
elemento x en la lista xs. Por ejemplo,
posiciones 5 [1,5,3,5,5,7] [1,3,4]
posiciones :: Eq a => a -> [a] -> [Int]
posiciones x xs =
[i | (x',i) <- zip xs [0..n], x == x']
where n = length xs - 1
11 / 29
IM Tema 5: Definiciones de listas por comprensión
Comprensión de cadenas
Cadenas y listas
I Las cadenas son listas de caracteres. Por ejemplo,
*Main> "abc" == ['a','b','c']
True
I La expresión
"abc" :: String
es equivalente a
['a','b','c'] :: [Char]
I Las funciones sobre listas se aplican a las cadenas:
length "abcde" 5
reverse "abcde" "edcba"
"abcde" ++ "fg" "abcdefg"
posiciones 'a' "Salamanca" [1,3,5,8]
12 / 29
IM Tema 5: Definiciones de listas por comprensión
Comprensión de cadenas
Definiciones sobre cadenas con comprensión
I (minusculas c) es la cadena formada por las letras minúsculas
de la cadena c. Por ejemplo,
minusculas "EstoEsUnaPrueba" "stosnarueba"
minusculas :: String -> String
minusculas xs = [x | x <- xs, elem x ['a'..'z']]
I (ocurrencias x xs) es el número de veces que ocurre el
carácter x en la cadena xs. Por ejemplo,
ocurrencias 'a' "Salamanca" 4
ocurrencias :: Char -> String -> Int
ocurrencias x xs = length [x' | x' <- xs, x == x']
13 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Cifrado César
I En el cifrado César cada letra en el texto original es reemplazada
por otra letra que se encuentra 3 posiciones más adelante en el
alfabeto.
I La codificación de
"en todo la medida"
es
"hq wrgr od phglgd"
I Se puede generalizar desplazando cada letra n posiciones.
I La codificación con un desplazamiento 5 de
"en todo la medida"
es
"js ytit qf rjinif"
I La descodificación de un texto codificado con un desplazamiento
n se obtiene codificándolo con un desplazamiento −n.
14 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Tema 5: Definiciones de listas por comprensión
1. Generadores
2. Guardas
3. La función zip
4. Comprensión de cadenas
5. Cifrado César
Codificación y descodificación
Análisis de frecuencias
Descifrado
15 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Las funciones ord y char
I (ord c) es el código del carácter c. Por ejemplo,
ord 'a' 97
ord 'b' 98
ord 'A' 65
I (char n) es el carácter de código n. Por ejemplo,
chr 97 'a'
chr 98 'b'
chr 65 'A'
16 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Codificación y descodificación: Código de letra
I Simplificación: Sólo se codificarán las letras minúsculas dejando
los restantes caracteres sin modificar.
I (let2int c) es el entero correspondiente a la letra minúscula c.
Por ejemplo,
let2int 'a' 0
let2int 'd' 3
let2int 'z' 25
let2int :: Char -> Int
let2int c = ord c - ord 'a'
17 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Codificación y descodificación: Letra de código
I (int2let n) es la letra minúscula correspondiente al entero n.
Por ejemplo,
int2let 0 'a'
int2let 3 'd'
int2let 25 'z'
int2let :: Int -> Char
int2let n = chr (ord 'a' + n)
18 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Codificación y descodificación: Desplazamiento
I (desplaza n c) es el carácter obtenido desplazando n
caracteres el carácter c. Por ejemplo,
desplaza 3 'a' 'd'
desplaza 3 'y' 'b'
desplaza (-3) 'd' 'a'
desplaza (-3) 'b' 'y'
desplaza :: Int -> Char -> Char
desplaza n c
| elem c ['a'..'z'] = int2let ((let2int c+n) `mod` 26)
| otherwise = c
19 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Codificación y descodificación
I (codifica n xs) es el resultado de codificar el texto xs con un
desplazamiento n. Por ejemplo,
Prelude> codifica 3 "En todo la medida"
"Eq wrgr od phglgd"
Prelude> codifica (-3) "Eq wrgr od phglgd"
"En todo la medida"
codifica :: Int -> String -> String
codifica n xs = [desplaza n x | x <- xs]
20 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Codificación y descodificación
Propiedades de la codificación con QuickCheck
I Propiedad: Al desplazar −n un carácter desplazado n, se obtiene
el carácter inicial.
prop_desplaza n xs =
desplaza (-n) (desplaza n xs) == xs
*Main> quickCheck prop_desplaza
+++ OK, passed 100 tests.
I Propiedad: Al codificar con −n una cadena codificada con n, se
obtiene la cadena inicial.
prop_codifica n xs =
codifica (-n) (codifica n xs) == xs
*Main> quickCheck prop_codifica
+++ OK, passed 100 tests.
21 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Análisis de frecuencias
Tema 5: Definiciones de listas por comprensión
1. Generadores
2. Guardas
3. La función zip
4. Comprensión de cadenas
5. Cifrado César
Codificación y descodificación
Análisis de frecuencias
Descifrado
22 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Análisis de frecuencias
Tabla de frecuencias
I Para descifrar mensajes se parte de la frecuencia de aparición de
letras.
I tabla es la lista de la frecuencias de las letras en castellano, Por
ejemplo, la frecuencia de la ’a’ es del 12.53 %, la de la ’b’ es
1.42 %.
tabla :: [Float]
tabla = [12.53, 1.42, 4.68, 5.86, 13.68, 0.69, 1.01,
0.70, 6.25, 0.44, 0.01, 4.97, 3.15, 6.71,
8.68, 2.51, 0.88, 6.87, 7.98, 4.63, 3.93,
0.90, 0.02, 0.22, 0.90, 0.52]
23 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Análisis de frecuencias
Frecuencias
I (porcentaje n m) es el porcentaje de n sobre m. Por ejemplo,
porcentaje 2 5 40.0
porcentaje :: Int -> Int -> Float
porcentaje n m = (fromIntegral n / fromIntegral m) * 100
I (frecuencias xs) es la frecuencia de cada una de las minúsculas
de la cadena xs. Por ejemplo,
Prelude> frecuencias "en todo la medida"
[14.3,0,0,21.4,14.3,0,0,0,7.1,0,0,7.1,
7.1,7.1,14.3,0,0,0,0,7.1,0,0,0,0,0,0]
frecuencias :: String -> [Float]
frecuencias xs =
[porcentaje (ocurrencias x xs) n | x <- ['a'..'z']]
where n = length (minusculas xs)
24 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Descifrado
Tema 5: Definiciones de listas por comprensión
1. Generadores
2. Guardas
3. La función zip
4. Comprensión de cadenas
5. Cifrado César
Codificación y descodificación
Análisis de frecuencias
Descifrado
25 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Descifrado
Descifrado: Ajuste chi cuadrado
I Una medida de la discrepancia entre la distribución observada osi
y la esperada esi es
χ2
=
n−1
X
i=0
(osi − esi )2
esi
Los menores valores corresponden a menores discrepancias.
I (chiCuad os es) es la medida chi cuadrado de las
distribuciones os y es. Por ejemplo,
chiCuad [3,5,6] [3,5,6] 0.0
chiCuad [3,5,6] [5,6,3] 3.9666667
chiCuad :: [Float] -> [Float] -> Float
chiCuad os es =
sum [((o-e)^2)/e | (o,e) <- zip os es]
26 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Descifrado
Descifrado: Rotación
I (rota n xs) es la lista obtenida rotando n posiciones los
elementos de la lista xs. Por ejemplo,
rota 2 "manolo" "noloma"
rota :: Int -> [a] -> [a]
rota n xs = drop n xs ++ take n xs
27 / 29
IM Tema 5: Definiciones de listas por comprensión
Cifrado César
Descifrado
Descifrado
I (descifra xs) es la cadena obtenida descodificando la cadena xs
por el anti-desplazamiento que produce una distribución de
minúsculas con la menor desviación chi cuadrado respecto de la
tabla de distribución de las letras en castellano. Por ejemplo,
*Main> codifica 5 "Todo para nada"
"Ttit ufwf sfif"
*Main> descifra "Ttit ufwf sfif"
"Todo para nada"
descifra :: String -> String
descifra xs = codifica (-factor) xs
where
factor = head (posiciones (minimum tabChi) tabChi)
tabChi = [chiCuad (rota n tabla') tabla | n <- [0..25]]
tabla' = frecuencias xs
28 / 29
IM Tema 5: Definiciones de listas por comprensión
Bibliografía
Bibliografía
1. R. Bird. Introducción a la programación funcional con Haskell.
Prentice Hall, 2000.
I Cap. 4: Listas.
2. G. Hutton Programming in Haskell. Cambridge University Press.
I Cap. 5: List comprehensions.
3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
O’Reilly, 2008.
I Cap. 12: Barcode Recognition.
4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
con Haskell. Thompson, 2004.
I Cap. 6: Programación con listas.
5. S. Thompson. Haskell: The Craft of Functional Programming,
Second Edition. Addison-Wesley, 1999.
I Cap. 5: Data types: tuples and lists.
29 / 29

Weitere ähnliche Inhalte

Mehr von José A. Alonso

Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasJosé A. Alonso
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenJosé A. Alonso
 

Mehr von José A. Alonso (20)

Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer orden
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulas
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer orden
 

Kürzlich hochgeladen

Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASEjemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASJavier Sanchez
 
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdfdiana593621
 
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAEL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCEIP TIERRA DE PINARES
 
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.docGLADYSPASTOR
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosAgrela Elvixeo
 
Revista digital primer ciclo 2024 colección ediba
Revista digital primer ciclo 2024 colección edibaRevista digital primer ciclo 2024 colección ediba
Revista digital primer ciclo 2024 colección edibaTatiTerlecky1
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptjosemanuelcremades
 
Los escritos administrativos, técnicos y comerciales
Los escritos administrativos, técnicos y comercialesLos escritos administrativos, técnicos y comerciales
Los escritos administrativos, técnicos y comercialeshanda210618
 
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacion
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacionUNIDAD DE APRENDIZAJE MARZO 2024.docx para educacion
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacionCarolVigo1
 
Presentación: Actividad de Diálogos adolescentes.pptx
Presentación: Actividad de  Diálogos adolescentes.pptxPresentación: Actividad de  Diálogos adolescentes.pptx
Presentación: Actividad de Diálogos adolescentes.pptxNabel Paulino Guerra Huaranca
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxArs Erótica
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarCa Ut
 
PPT Protocolo de desregulación emocional.pptx
PPT Protocolo de desregulación emocional.pptxPPT Protocolo de desregulación emocional.pptx
PPT Protocolo de desregulación emocional.pptxKarenSepulveda23
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaIGNACIO BALLESTER PARDO
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADODJElvitt
 
Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Ivie
 
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxTECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxFranciscoCruz296518
 

Kürzlich hochgeladen (20)

Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASEjemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
 
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
 
Actividad de bienestar docente 2016 Pereira
Actividad de bienestar docente 2016 PereiraActividad de bienestar docente 2016 Pereira
Actividad de bienestar docente 2016 Pereira
 
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAEL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
 
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES Monelos
 
Revista digital primer ciclo 2024 colección ediba
Revista digital primer ciclo 2024 colección edibaRevista digital primer ciclo 2024 colección ediba
Revista digital primer ciclo 2024 colección ediba
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.ppt
 
Los escritos administrativos, técnicos y comerciales
Los escritos administrativos, técnicos y comercialesLos escritos administrativos, técnicos y comerciales
Los escritos administrativos, técnicos y comerciales
 
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacion
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacionUNIDAD DE APRENDIZAJE MARZO 2024.docx para educacion
UNIDAD DE APRENDIZAJE MARZO 2024.docx para educacion
 
Presentación: Actividad de Diálogos adolescentes.pptx
Presentación: Actividad de  Diálogos adolescentes.pptxPresentación: Actividad de  Diálogos adolescentes.pptx
Presentación: Actividad de Diálogos adolescentes.pptx
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptx
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolar
 
VISITA DE ESTUDO À CRUZ VERMELHA _
VISITA DE ESTUDO À CRUZ VERMELHA                   _VISITA DE ESTUDO À CRUZ VERMELHA                   _
VISITA DE ESTUDO À CRUZ VERMELHA _
 
PPT Protocolo de desregulación emocional.pptx
PPT Protocolo de desregulación emocional.pptxPPT Protocolo de desregulación emocional.pptx
PPT Protocolo de desregulación emocional.pptx
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO
 
Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023
 
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxTECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
 

Tema 5: Definiciones de listas por comprensión en Haskell

  • 1. Tema 5: Definiciones de listas por comprensión Informática (2013–14) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
  • 2. IM Tema 5: Definiciones de listas por comprensión Tema 5: Definiciones de listas por comprensión 1. Generadores 2. Guardas 3. La función zip 4. Comprensión de cadenas 5. Cifrado César Codificación y descodificación Análisis de frecuencias Descifrado 2 / 29
  • 3. IM Tema 5: Definiciones de listas por comprensión Generadores Definiciones por comprensión I Definiciones por comprensión en Matemáticas: {x2 : x ∈ {2, 3, 4, 5}} = {4, 9, 16, 25} I Definiciones por comprensión en Haskell: Prelude> [x^2 | x <- [2..5]] [4,9,16,25] I La expresión x <- [2..5] se llama un generador. I Ejemplos con más de un generador: Prelude> [(x,y) | x <- [1,2,3], y <- [4,5]] [(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)] Prelude> [(x,y) | y <- [4,5], x <- [1,2,3]] [(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)] 3 / 29
  • 4. IM Tema 5: Definiciones de listas por comprensión Generadores Generadores dependientes I Ejemplo con generadores dependientes: Prelude> [(x,y) | x <- [1..3], y <- [x..3]] [(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)] I (concat xss) es la concatenación de la lista de listas xss. Por ejemplo, concat [[1,3],[2,5,6],[4,7]] [1,3,2,5,6,4,7] Prelude concat :: [[a]] -> [a] concat xss = [x | xs <- xss, x <- xs] 4 / 29
  • 5. IM Tema 5: Definiciones de listas por comprensión Generadores Generadores con variables anónimas I Ejemplo de generador con variable anónima: (primeros ps) es la lista de los primeros elementos de la lista de pares ps. Por ejemplo, primeros [(1,3),(2,5),(6,3)] [1,2,6] primeros :: [(a, b)] -> [a] primeros ps = [x | (x,_) <- ps] I Definición de la longitud por comprensión Prelude length :: [a] -> Int length xs = sum [1 | _ <- xs] 5 / 29
  • 6. IM Tema 5: Definiciones de listas por comprensión Guardas Guardas I Las listas por comprensión pueden tener guardas para restringir los valores. I Ejemplo de guarda: Prelude> [x | x <- [1..10], even x] [2,4,6,8,10] La guarda es even x. I (factores n) es la lista de los factores del número n. Por ejemplo, factores 30 [1,2,3,5,6,10,15,30] factores :: Int -> [Int] factores n = [x | x <- [1..n], n `mod` x == 0] 6 / 29
  • 7. IM Tema 5: Definiciones de listas por comprensión Guardas Guardas: Cálculo de primos I (primo n) se verifica si n es primo. Por ejemplo, primo 30 False primo 31 True primo :: Int -> Bool primo n = factores n == [1, n] I (primos n) es la lista de los primos menores o iguales que n. Por ejemplo, primos 31 [2,3,5,7,11,13,17,19,23,29,31] primos :: Int -> [Int] primos n = [x | x <- [2..n], primo x] 7 / 29
  • 8. IM Tema 5: Definiciones de listas por comprensión Guardas Guarda con igualdad I Una lista de asociación es una lista de pares formado por una clave y un valor. Por ejemplo, [("Juan",7),("Ana",9),("Eva",3)] I (busca c t) es la lista de los valores de la lista de asociación t cuyas claves valen c. Por ejemplo, Prelude> busca 'b' [('a',1),('b',3),('c',5),('b',2)] [3,2] busca :: Eq a => a -> [(a, b)] -> [b] busca c t = [v | (c', v) <- t, c' == c] 8 / 29
  • 9. IM Tema 5: Definiciones de listas por comprensión La función zip La función zip y elementos adyacentes I (zip xs ys) es la lista obtenida emparejando los elementos de las listas xs e ys. Por ejemplo, Prelude> zip ['a','b','c'] [2,5,4,7] [('a',2),('b',5),('c',4)] I (adyacentes xs) es la lista de los pares de elementos adyacentes de la lista xs. Por ejemplo, adyacentes [2,5,3,7] [(2,5),(5,3),(3,7)] adyacentes :: [a] -> [(a, a)] adyacentes xs = zip xs (tail xs) 9 / 29
  • 10. IM Tema 5: Definiciones de listas por comprensión La función zip Las funciones zip, and y listas ordenadas I (and xs) se verifica si todos los elementos de xs son verdaderos. Por ejemplo, and [2 < 3, 2+3 == 5] True and [2 < 3, 2+3 == 5, 7 < 7] False I (ordenada xs) se verifica si la lista xs está ordenada. Por ejemplo, ordenada [1,3,5,6,7] True ordenada [1,3,6,5,7] False ordenada :: Ord a => [a] -> Bool ordenada xs = and [x <= y | (x,y) <- adyacentes xs] 10 / 29
  • 11. IM Tema 5: Definiciones de listas por comprensión La función zip La función zip y lista de posiciones I (posiciones x xs) es la lista de las posiciones ocupadas por el elemento x en la lista xs. Por ejemplo, posiciones 5 [1,5,3,5,5,7] [1,3,4] posiciones :: Eq a => a -> [a] -> [Int] posiciones x xs = [i | (x',i) <- zip xs [0..n], x == x'] where n = length xs - 1 11 / 29
  • 12. IM Tema 5: Definiciones de listas por comprensión Comprensión de cadenas Cadenas y listas I Las cadenas son listas de caracteres. Por ejemplo, *Main> "abc" == ['a','b','c'] True I La expresión "abc" :: String es equivalente a ['a','b','c'] :: [Char] I Las funciones sobre listas se aplican a las cadenas: length "abcde" 5 reverse "abcde" "edcba" "abcde" ++ "fg" "abcdefg" posiciones 'a' "Salamanca" [1,3,5,8] 12 / 29
  • 13. IM Tema 5: Definiciones de listas por comprensión Comprensión de cadenas Definiciones sobre cadenas con comprensión I (minusculas c) es la cadena formada por las letras minúsculas de la cadena c. Por ejemplo, minusculas "EstoEsUnaPrueba" "stosnarueba" minusculas :: String -> String minusculas xs = [x | x <- xs, elem x ['a'..'z']] I (ocurrencias x xs) es el número de veces que ocurre el carácter x en la cadena xs. Por ejemplo, ocurrencias 'a' "Salamanca" 4 ocurrencias :: Char -> String -> Int ocurrencias x xs = length [x' | x' <- xs, x == x'] 13 / 29
  • 14. IM Tema 5: Definiciones de listas por comprensión Cifrado César Cifrado César I En el cifrado César cada letra en el texto original es reemplazada por otra letra que se encuentra 3 posiciones más adelante en el alfabeto. I La codificación de "en todo la medida" es "hq wrgr od phglgd" I Se puede generalizar desplazando cada letra n posiciones. I La codificación con un desplazamiento 5 de "en todo la medida" es "js ytit qf rjinif" I La descodificación de un texto codificado con un desplazamiento n se obtiene codificándolo con un desplazamiento −n. 14 / 29
  • 15. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Tema 5: Definiciones de listas por comprensión 1. Generadores 2. Guardas 3. La función zip 4. Comprensión de cadenas 5. Cifrado César Codificación y descodificación Análisis de frecuencias Descifrado 15 / 29
  • 16. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Las funciones ord y char I (ord c) es el código del carácter c. Por ejemplo, ord 'a' 97 ord 'b' 98 ord 'A' 65 I (char n) es el carácter de código n. Por ejemplo, chr 97 'a' chr 98 'b' chr 65 'A' 16 / 29
  • 17. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Codificación y descodificación: Código de letra I Simplificación: Sólo se codificarán las letras minúsculas dejando los restantes caracteres sin modificar. I (let2int c) es el entero correspondiente a la letra minúscula c. Por ejemplo, let2int 'a' 0 let2int 'd' 3 let2int 'z' 25 let2int :: Char -> Int let2int c = ord c - ord 'a' 17 / 29
  • 18. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Codificación y descodificación: Letra de código I (int2let n) es la letra minúscula correspondiente al entero n. Por ejemplo, int2let 0 'a' int2let 3 'd' int2let 25 'z' int2let :: Int -> Char int2let n = chr (ord 'a' + n) 18 / 29
  • 19. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Codificación y descodificación: Desplazamiento I (desplaza n c) es el carácter obtenido desplazando n caracteres el carácter c. Por ejemplo, desplaza 3 'a' 'd' desplaza 3 'y' 'b' desplaza (-3) 'd' 'a' desplaza (-3) 'b' 'y' desplaza :: Int -> Char -> Char desplaza n c | elem c ['a'..'z'] = int2let ((let2int c+n) `mod` 26) | otherwise = c 19 / 29
  • 20. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Codificación y descodificación I (codifica n xs) es el resultado de codificar el texto xs con un desplazamiento n. Por ejemplo, Prelude> codifica 3 "En todo la medida" "Eq wrgr od phglgd" Prelude> codifica (-3) "Eq wrgr od phglgd" "En todo la medida" codifica :: Int -> String -> String codifica n xs = [desplaza n x | x <- xs] 20 / 29
  • 21. IM Tema 5: Definiciones de listas por comprensión Cifrado César Codificación y descodificación Propiedades de la codificación con QuickCheck I Propiedad: Al desplazar −n un carácter desplazado n, se obtiene el carácter inicial. prop_desplaza n xs = desplaza (-n) (desplaza n xs) == xs *Main> quickCheck prop_desplaza +++ OK, passed 100 tests. I Propiedad: Al codificar con −n una cadena codificada con n, se obtiene la cadena inicial. prop_codifica n xs = codifica (-n) (codifica n xs) == xs *Main> quickCheck prop_codifica +++ OK, passed 100 tests. 21 / 29
  • 22. IM Tema 5: Definiciones de listas por comprensión Cifrado César Análisis de frecuencias Tema 5: Definiciones de listas por comprensión 1. Generadores 2. Guardas 3. La función zip 4. Comprensión de cadenas 5. Cifrado César Codificación y descodificación Análisis de frecuencias Descifrado 22 / 29
  • 23. IM Tema 5: Definiciones de listas por comprensión Cifrado César Análisis de frecuencias Tabla de frecuencias I Para descifrar mensajes se parte de la frecuencia de aparición de letras. I tabla es la lista de la frecuencias de las letras en castellano, Por ejemplo, la frecuencia de la ’a’ es del 12.53 %, la de la ’b’ es 1.42 %. tabla :: [Float] tabla = [12.53, 1.42, 4.68, 5.86, 13.68, 0.69, 1.01, 0.70, 6.25, 0.44, 0.01, 4.97, 3.15, 6.71, 8.68, 2.51, 0.88, 6.87, 7.98, 4.63, 3.93, 0.90, 0.02, 0.22, 0.90, 0.52] 23 / 29
  • 24. IM Tema 5: Definiciones de listas por comprensión Cifrado César Análisis de frecuencias Frecuencias I (porcentaje n m) es el porcentaje de n sobre m. Por ejemplo, porcentaje 2 5 40.0 porcentaje :: Int -> Int -> Float porcentaje n m = (fromIntegral n / fromIntegral m) * 100 I (frecuencias xs) es la frecuencia de cada una de las minúsculas de la cadena xs. Por ejemplo, Prelude> frecuencias "en todo la medida" [14.3,0,0,21.4,14.3,0,0,0,7.1,0,0,7.1, 7.1,7.1,14.3,0,0,0,0,7.1,0,0,0,0,0,0] frecuencias :: String -> [Float] frecuencias xs = [porcentaje (ocurrencias x xs) n | x <- ['a'..'z']] where n = length (minusculas xs) 24 / 29
  • 25. IM Tema 5: Definiciones de listas por comprensión Cifrado César Descifrado Tema 5: Definiciones de listas por comprensión 1. Generadores 2. Guardas 3. La función zip 4. Comprensión de cadenas 5. Cifrado César Codificación y descodificación Análisis de frecuencias Descifrado 25 / 29
  • 26. IM Tema 5: Definiciones de listas por comprensión Cifrado César Descifrado Descifrado: Ajuste chi cuadrado I Una medida de la discrepancia entre la distribución observada osi y la esperada esi es χ2 = n−1 X i=0 (osi − esi )2 esi Los menores valores corresponden a menores discrepancias. I (chiCuad os es) es la medida chi cuadrado de las distribuciones os y es. Por ejemplo, chiCuad [3,5,6] [3,5,6] 0.0 chiCuad [3,5,6] [5,6,3] 3.9666667 chiCuad :: [Float] -> [Float] -> Float chiCuad os es = sum [((o-e)^2)/e | (o,e) <- zip os es] 26 / 29
  • 27. IM Tema 5: Definiciones de listas por comprensión Cifrado César Descifrado Descifrado: Rotación I (rota n xs) es la lista obtenida rotando n posiciones los elementos de la lista xs. Por ejemplo, rota 2 "manolo" "noloma" rota :: Int -> [a] -> [a] rota n xs = drop n xs ++ take n xs 27 / 29
  • 28. IM Tema 5: Definiciones de listas por comprensión Cifrado César Descifrado Descifrado I (descifra xs) es la cadena obtenida descodificando la cadena xs por el anti-desplazamiento que produce una distribución de minúsculas con la menor desviación chi cuadrado respecto de la tabla de distribución de las letras en castellano. Por ejemplo, *Main> codifica 5 "Todo para nada" "Ttit ufwf sfif" *Main> descifra "Ttit ufwf sfif" "Todo para nada" descifra :: String -> String descifra xs = codifica (-factor) xs where factor = head (posiciones (minimum tabChi) tabChi) tabChi = [chiCuad (rota n tabla') tabla | n <- [0..25]] tabla' = frecuencias xs 28 / 29
  • 29. IM Tema 5: Definiciones de listas por comprensión Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. I Cap. 4: Listas. 2. G. Hutton Programming in Haskell. Cambridge University Press. I Cap. 5: List comprehensions. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. I Cap. 12: Barcode Recognition. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. I Cap. 6: Programación con listas. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. I Cap. 5: Data types: tuples and lists. 29 / 29