SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Ejercicio 1
Sea el siguiente tipo: type Punto = (Int,Int)
Definir, usando listas por comprensi´n, una lista (infinita) puntosDelPlano::[Punto] que
o
contenga todos los puntos del cuadrante superior derecho del plano.
Atenci´n: la funci´n debe garantizar que eventualmente todo punto del cuadrante
o
o
superior derecho ser´ listado. Una forma de garantizar esto es recorrer los puntos
a
siguiendo las diagonales x + y = k, con k = 0, 1, 2, 3, . . . (ver el gr´fico).
a
Ejemplo: [ (0,0), (0,1), (1,0), (0,2), (1,1), (2,0),
(0,3), (1,2), (2,1), (3,0), (0,4), ... ]

Soluci´n 1
o
puntosDelPlano :: [Punto]
puntosDelPlano = [(x, y) | k <- [0..], x <- [0..k], y<- [0..k], x + y == k]
Soluci´n 2
o
puntosDelPlano :: [Punto]
puntosDelPlano = [(x,k-x) | k<-[0..], x<-[0..k]]

Ejercicio 2
´
Definimos el siguiente tipo: data Arbol a = Hoja a | Bin (´rbol a) a (´rbol a)
A
A
Ejemplo: mi´rbol = Bin (Hoja 3) 5 (Bin (Hoja 7) 8 (Hoja 1))
A
Sea foldAB el siguiente esquema de recursi´n gen´rico para ´rboles:
o
e
a
foldAB f g (Hoja n) = f n
foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2)
En la resoluci´n de este ejercicio, no usar recursi´n expl´
o
o
ıcita.
1. Decir cu´l es el tipo de las funciones f, g y foldAB.
a
Soluci´n
o
a) Miremos foldAB. Sabemos que recibe 3 par´metros:
a
foldAB :: a -> b -> c -> d

1
´
Por la forma en que esta definida foldAB, sabemos que el 3er par´metro es un Arbol.
a
Adem´s, sabemos que el primer y segundo par´metro son funciones.
a
a
foldAB :: a -> b -> ´rbol c -> d
A
b) Sabemos que f (el primer par´metro de foldAB) recibe un s´lo par´metro:
a
o
a
foldAB :: (a -> e) -> b -> ´rbol c -> d
A
Por los usos de f en la definici´n de foldAB debemos pensar que en principio a y e
o
podr´ ser tipos distintos.
ıan
c) Sabemos que g (el segundo par´metro de foldAB) recibe tres par´metros:
a
a
foldAB :: (a -> e) -> (b -> h -> i -> j) -> ´rbol c -> d
A
d ) Mirando:
foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2)
Vemos que foldAB f g (Bin t1 n t2) es de tipo d (el tipo de retorno de foldAB).
Adem´s foldAB f g t1 , foldAB f g t2 y g (foldAB f g t1) n (foldAB f g t2)
a
tambi´n deben ser del mismo tipo. Por lo tanto:
e
foldAB :: (a -> e) -> (d -> h -> d -> d) -> ´rbol c -> d
A
e) Mirando ahora:
foldAB f g (Hoja n) = f n
y sabiendo que foldAB f g (Hoja n) tiene que ser de tipo d, podemos concluir que
f n tambi´n ser´ del mismo tipo. Por lo tanto:
e
a
foldAB :: (a -> d) -> (d -> h -> d -> d) -> ´rbol c -> d
A
f ) Mirando nuevamente:
foldAB f g (Hoja n) = f n
Vemos que el par´metro de f es del mismo tipo que los elementos del ´rbol. Lo mismo
a
a
pasa con el segundo par´metro de g en:
a
foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2)
Por lo tanto:
foldAB :: (a -> d) -> (d -> a -> d -> d) -> ´rbol a -> d
A
No podemos deducir nada m´s. Haciendo un renombre de d por b nos queda:
a
´
foldAB :: (a ->b) ->(b ->a ->b ->b) ->Arbol a ->b

2. Usando foldAB, definir una funci´n hojas :: ´rbol a ->[a], que devuelva todas las hojas
o
A
de un ´rbol.
a
´
Ejemplo: hojas miArbol devuelve [3, 7, 1]

2
Soluci´n
o
hojas = foldAB singleton union
where
singleton x = [x]
union xs x ys = xs ++ ys

3. Usando foldAB, definir una funci´n espejo :: ´rbol a ->´rbol a, que devuelva el ´rbol
o
A
A
a
que resulte de invertir en todos los niveles el sub´rbol izquierdo por el derecho.
a
Ejemplo: espejo mi´rbol devuelve el ´rbol Bin (Bin (Hoja 1) 8 (Hoja 7)) 5 (Hoja 3)
A
a
Soluci´n
o
espejo = foldAB Hoja rbin
where
rbin t x t’ = Bin t’ x t

´
4. Usando foldAB, definir una funci´n ramas :: Arbol a -> [[a]], que devuelva la lista de
o
ramas de un ´rbol.
a
´
Ejemplo: ramas miArbol devuelve [[5,3],[5,8,7],[5,8,1]]
Soluci´n
o
ramas = foldAB singleton merge
where
singleton x = [[x]]
merge xs x ys = (map (x:) xs) ++ (map (x:) ys)
ramas = foldAB ((:[]).(:[])) merge
where
merge xs x ys = (map (x:) xs) ++ (map (x:) ys)

Ejercicio 3
Dado el siguiente tipo, que representa un ´rbol arbitrario o RoseTree:
a
data ´rbol a = Rose(a, [´rbol a])
A
A
deducir el tipo de la siguiente funci´n:
o
g a f = Rose(a, map (flip g f) (f a))
donde:
flip f x y = f y x
Soluci´n
o
Sabemos que g recibe dos par´metros:
a
g :: a -> b -> c
´
El resultado de g es un Arbol: (por Rose):
g :: a -> b -> ´rbol c
A
3
a
o
En la expresi´n f a , vemos que f (el segundo par´metro) debe ser una funci´n de por lo
o
menos un par´metro:
a
´
g :: a -> (b -> d) -> Arbol c
A su vez, f a es el segundo argumento de map en map (flip g f) (f a) , y por lo tanto
debe ser una lista:
g :: a -> (b -> [d]) -> ´rbol c
A
Notemos que el primer par´metro de g sirve como par´metro a f y como elemento del ´rbol
a
a
a
resultado, con lo cual:
´
g :: a -> (a -> [d]) -> Arbol a
Por otro lado, sabemos que el tipo de flip es:
flip :: (a -> b -> c) -> (b -> a -> c)
Quiere decir que:
flip g :: (a -> [d]) -> a -> ´rbol a
A
Entonces:
flip g f :: a -> ´rbol a
A
o
Como el primer par´metro de map en map (flip g f) (f a) es una funci´n de tipo
a
a -> ´rbol a, los elementos de la lista f a deben ser de tipo a. Por lo tanto:
A
g :: a -> (a -> [a]) -> ´rbol a
A
´
Podemos ver que todo cierra porque todo el map devuelve [Arbol a], es es lo que necesita
´rbol
el constructor Rose de A

Ejercicio 4
1. Definir la funci´n:
o
foldr2:: (a -> b -> c -> c) -> c -> [a] -> [b] -> c
Esta funci´n es similar a foldr, pero trabaja sobre dos listas en lugar de una. La funci´n
o
o
que recibe como par´metro se aplica a un elemento de cada lista y al caso base calculado
a
hasta el momento. Ambas listas son recorridas de derecha a izquierda y la funci´n s´lo debe
o o
estar definida para listas de igual longitud.
Por ejemplo, el resultado de evaluar esta expresi´n:
o
foldr2 (x y b -> (x,y):b) [] [1,2,3] [‘a’,‘b’,‘c’]
es: [(1,‘a’),(2,‘b’),(3,‘c’)]
Soluci´n
o
foldr2:: (a -> b -> c -> c) -> c -> [a] -> [b] -> c
foldr2 f b [] [] = b
foldr2 f b (x:xs) (y:ys) = f x y (foldr2 f b xs ys)

4
2. Sea el tipo:
type Matriz a = [[a]]
Utilizando foldr2 y listas por comprensi´n, y sin utilizar recursi´n expl´
o
o
ıcita, definir el operador:
(<*>) :: Matriz a -> Matriz a -> Matriz a
Este operador toma dos matrices y devuelve el producto entre ellas. Recordar que el producto
entre dos matrices m1 y m2 s´lo est´ definido cuando m1 es de N × M y m2 es de M × T .
o
a
Por ejemplo:
1 2
4 5
7 8

X

1 2 3
4 5 6

=

9 12 15
24 33 42
39 54 69

Ayuda: Se cuenta con la siguiente funci´n:
o
col :: Int -> Matriz a -> [a]
col i = map (!!i)
que devuelve la i-´sima columna de una matriz (la primera columna corresponde al 0).
e
Soluci´n
o
cols m = [col z m | z <- [0..((length (m!!0)) - 1)]]
(<*>) m1 m2 =
[ [
foldr2 (x y b -> x*y + b) 0 (m1!!i) ((cols m2)!!j) |
j <- [0..(length (cols m2)) - 1] ]
| i <- [0..(length m1) - 1] ]
i <- [0..(length m1) - 1] es la lista de ´
ındices de filas de m1, es decir 0 . . . N − 1.
j <- [0..(length (cols m2)) - 1] es la lista de ´
ındices de columnas de m2, es decir
0 . . . T − 1.
La lista interna es una de las filas de la matriz resultado. Cada fila tendr´ T columnas.
a
La lista de afuera es la lista de filas de la matriz resultado: habr´ N filas, como era de
a
esperarse.
m1!!i es la i-´sima fila de la matriz m1.
e
cols m2!!j es la j-´sima columna de la matriz m2.
e
La funci´n (x y b -> x*y + b) toma un elemento de la fila y otro de la columna, los
o
multiplica entre s´ y los suma al acumulado.
ı
Quiere decir que cada elemento de la lista de m´s adentro es el resultado de multiplicar
a
una fila de m1 por una columna de m2.
Es decir:
(m1 < ∗ > m2)ij =

m1ik ∗ m2kj
k

5

Más contenido relacionado

La actualidad más candente (20)

Funciones
FuncionesFunciones
Funciones
 
Clase - funciones
Clase - funciones Clase - funciones
Clase - funciones
 
Tema8 funciones
Tema8 funcionesTema8 funciones
Tema8 funciones
 
Introducción a las Funciones Reales ccesa007
Introducción a las Funciones Reales  ccesa007Introducción a las Funciones Reales  ccesa007
Introducción a las Funciones Reales ccesa007
 
Funciones y relaciones
Funciones y relacionesFunciones y relaciones
Funciones y relaciones
 
Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3
 
02 sesion
02 sesion02 sesion
02 sesion
 
Funciones
FuncionesFunciones
Funciones
 
Taller 10-14-ii
Taller 10-14-iiTaller 10-14-ii
Taller 10-14-ii
 
Suma de funciones
Suma de funcionesSuma de funciones
Suma de funciones
 
Mat lab03
Mat lab03Mat lab03
Mat lab03
 
La Funcion Exponencial
La Funcion ExponencialLa Funcion Exponencial
La Funcion Exponencial
 
Operaciones Con Funciones
Operaciones Con FuncionesOperaciones Con Funciones
Operaciones Con Funciones
 
Lab 1
Lab 1Lab 1
Lab 1
 
Integral definida
Integral definidaIntegral definida
Integral definida
 
2) funciones Compuestas
2) funciones Compuestas2) funciones Compuestas
2) funciones Compuestas
 
Integrales numericas
Integrales numericasIntegrales numericas
Integrales numericas
 
Integral definida
Integral definidaIntegral definida
Integral definida
 
Operaciones de Funciones
Operaciones de FuncionesOperaciones de Funciones
Operaciones de Funciones
 
Ejercicios áreas entre funciones
Ejercicios áreas entre funcionesEjercicios áreas entre funciones
Ejercicios áreas entre funciones
 

Destacado

Problemas algebra uc3m resueltos
Problemas algebra uc3m resueltosProblemas algebra uc3m resueltos
Problemas algebra uc3m resueltosEmilio Garcia
 
16. funciones exponencial y logaritmica
16. funciones exponencial y logaritmica16. funciones exponencial y logaritmica
16. funciones exponencial y logaritmicaLuis Palomino Alba
 
Actividades funciónes y graficas
Actividades funciónes y graficasActividades funciónes y graficas
Actividades funciónes y graficasmarsanchez08
 
Funciones Ejercicios repaso
 Funciones Ejercicios repaso Funciones Ejercicios repaso
Funciones Ejercicios repasomarsanchez08
 
Teoría de funciones y gráficas
Teoría de funciones y gráficasTeoría de funciones y gráficas
Teoría de funciones y gráficasmarsanchez08
 
FPTP - Recent developments within the US Supreme Court
FPTP - Recent developments within the US Supreme CourtFPTP - Recent developments within the US Supreme Court
FPTP - Recent developments within the US Supreme Courttutor2u
 
Принципи роботи з аудіовізуальними засобами навчання
Принципи роботи з аудіовізуальними засобами навчанняПринципи роботи з аудіовізуальними засобами навчання
Принципи роботи з аудіовізуальними засобами навчанняAndriushchenko
 
Transceviers
TransceviersTransceviers
Transceviersvinay mp
 
How we translate wh questions in english &amp; arabic (2)
How we translate wh questions in  english &amp; arabic (2)How we translate wh questions in  english &amp; arabic (2)
How we translate wh questions in english &amp; arabic (2)Montaha-Alamri
 
Pp sustainable performance
Pp sustainable performancePp sustainable performance
Pp sustainable performancebenjaminperrig
 
Top 8 legal secretary resume samples
Top 8 legal secretary resume samplesTop 8 legal secretary resume samples
Top 8 legal secretary resume samplesJappStam678
 
Austin_Tobin_Final_Year Report_AP4_58069328
Austin_Tobin_Final_Year Report_AP4_58069328Austin_Tobin_Final_Year Report_AP4_58069328
Austin_Tobin_Final_Year Report_AP4_58069328Austin Tobin
 
Mantenimiento al hardware y software
Mantenimiento al hardware y softwareMantenimiento al hardware y software
Mantenimiento al hardware y softwareNayeli Thu Real Mami
 
Slides fra mentorkursus.
Slides fra mentorkursus. Slides fra mentorkursus.
Slides fra mentorkursus. Erhvervsmentor
 
Call For Somnath City-7503367689
Call For Somnath City-7503367689Call For Somnath City-7503367689
Call For Somnath City-7503367689Nitin Kumar
 

Destacado (20)

Funciones
Funciones Funciones
Funciones
 
Problemas algebra uc3m resueltos
Problemas algebra uc3m resueltosProblemas algebra uc3m resueltos
Problemas algebra uc3m resueltos
 
16. funciones exponencial y logaritmica
16. funciones exponencial y logaritmica16. funciones exponencial y logaritmica
16. funciones exponencial y logaritmica
 
Actividades funciónes y graficas
Actividades funciónes y graficasActividades funciónes y graficas
Actividades funciónes y graficas
 
Funciones Ejercicios repaso
 Funciones Ejercicios repaso Funciones Ejercicios repaso
Funciones Ejercicios repaso
 
Teoría de funciones y gráficas
Teoría de funciones y gráficasTeoría de funciones y gráficas
Teoría de funciones y gráficas
 
FPTP - Recent developments within the US Supreme Court
FPTP - Recent developments within the US Supreme CourtFPTP - Recent developments within the US Supreme Court
FPTP - Recent developments within the US Supreme Court
 
Принципи роботи з аудіовізуальними засобами навчання
Принципи роботи з аудіовізуальними засобами навчанняПринципи роботи з аудіовізуальними засобами навчання
Принципи роботи з аудіовізуальними засобами навчання
 
Transceviers
TransceviersTransceviers
Transceviers
 
EOP.IM.S31
EOP.IM.S31EOP.IM.S31
EOP.IM.S31
 
How we translate wh questions in english &amp; arabic (2)
How we translate wh questions in  english &amp; arabic (2)How we translate wh questions in  english &amp; arabic (2)
How we translate wh questions in english &amp; arabic (2)
 
PERNYATAAN STANDAR AKUNTANSI KEUANGAN 45
PERNYATAAN STANDAR AKUNTANSI KEUANGAN 45PERNYATAAN STANDAR AKUNTANSI KEUANGAN 45
PERNYATAAN STANDAR AKUNTANSI KEUANGAN 45
 
Pp sustainable performance
Pp sustainable performancePp sustainable performance
Pp sustainable performance
 
Top 8 legal secretary resume samples
Top 8 legal secretary resume samplesTop 8 legal secretary resume samples
Top 8 legal secretary resume samples
 
Austin_Tobin_Final_Year Report_AP4_58069328
Austin_Tobin_Final_Year Report_AP4_58069328Austin_Tobin_Final_Year Report_AP4_58069328
Austin_Tobin_Final_Year Report_AP4_58069328
 
Mantenimiento al hardware y software
Mantenimiento al hardware y softwareMantenimiento al hardware y software
Mantenimiento al hardware y software
 
GExMBA WEB
GExMBA WEBGExMBA WEB
GExMBA WEB
 
Slides fra mentorkursus.
Slides fra mentorkursus. Slides fra mentorkursus.
Slides fra mentorkursus.
 
Call For Somnath City-7503367689
Call For Somnath City-7503367689Call For Somnath City-7503367689
Call For Somnath City-7503367689
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitae
 

Similar a Apunte clase

Similar a Apunte clase (20)

Orca share media1432994332561
Orca share media1432994332561Orca share media1432994332561
Orca share media1432994332561
 
Funciones.pdf 01
Funciones.pdf  01Funciones.pdf  01
Funciones.pdf 01
 
Funciones
FuncionesFunciones
Funciones
 
Ex resuelto cc0708
Ex resuelto cc0708Ex resuelto cc0708
Ex resuelto cc0708
 
Funciones ejercicios-resueltos
Funciones ejercicios-resueltosFunciones ejercicios-resueltos
Funciones ejercicios-resueltos
 
Algebra: Monomios y Polinomios Parte II
Algebra: Monomios y Polinomios Parte IIAlgebra: Monomios y Polinomios Parte II
Algebra: Monomios y Polinomios Parte II
 
matlab
matlabmatlab
matlab
 
Electrónica: Tutorial de Matlab aplicado
Electrónica: Tutorial de Matlab aplicadoElectrónica: Tutorial de Matlab aplicado
Electrónica: Tutorial de Matlab aplicado
 
FUNCIONES REALES
FUNCIONES REALESFUNCIONES REALES
FUNCIONES REALES
 
MATEMÁTICAS 3 BGU
MATEMÁTICAS 3 BGUMATEMÁTICAS 3 BGU
MATEMÁTICAS 3 BGU
 
Funciones parte i
Funciones parte iFunciones parte i
Funciones parte i
 
Ejercicios sobre funciones elementales
Ejercicios sobre funciones elementalesEjercicios sobre funciones elementales
Ejercicios sobre funciones elementales
 
Ecuaciones exponenciales y logaritmicas.pdf
Ecuaciones exponenciales y logaritmicas.pdfEcuaciones exponenciales y logaritmicas.pdf
Ecuaciones exponenciales y logaritmicas.pdf
 
Algoritmos y su codificación en c++. volumen 1 (césar liza avila)
Algoritmos y su codificación en c++. volumen 1 (césar liza avila)Algoritmos y su codificación en c++. volumen 1 (césar liza avila)
Algoritmos y su codificación en c++. volumen 1 (césar liza avila)
 
Unidad i jorge m
Unidad i jorge mUnidad i jorge m
Unidad i jorge m
 
Multiplicacion de Matrices Ccesa007.pdf
Multiplicacion de Matrices  Ccesa007.pdfMultiplicacion de Matrices  Ccesa007.pdf
Multiplicacion de Matrices Ccesa007.pdf
 
3 Operaciones Binarias
3  Operaciones Binarias3  Operaciones Binarias
3 Operaciones Binarias
 
Ejercicios funciones(1)
Ejercicios funciones(1)Ejercicios funciones(1)
Ejercicios funciones(1)
 
Funciones
FuncionesFunciones
Funciones
 
Operaciones amtematica-14
Operaciones amtematica-14Operaciones amtematica-14
Operaciones amtematica-14
 

Más de Simar Leaño Prieto

Más de Simar Leaño Prieto (9)

Despido por causas legales
Despido por causas legalesDespido por causas legales
Despido por causas legales
 
Produccion y utilizacion de insumos
Produccion y utilizacion de insumosProduccion y utilizacion de insumos
Produccion y utilizacion de insumos
 
168315310 plan-de-negocios-minimarket
168315310 plan-de-negocios-minimarket168315310 plan-de-negocios-minimarket
168315310 plan-de-negocios-minimarket
 
Simulacioncsharp
SimulacioncsharpSimulacioncsharp
Simulacioncsharp
 
59563233 algoritmo-bresenham
59563233 algoritmo-bresenham59563233 algoritmo-bresenham
59563233 algoritmo-bresenham
 
Proceso de-desarrollo-software
Proceso de-desarrollo-softwareProceso de-desarrollo-software
Proceso de-desarrollo-software
 
Cocomo2 apuntes
Cocomo2 apuntesCocomo2 apuntes
Cocomo2 apuntes
 
Tesis con rup
Tesis con rupTesis con rup
Tesis con rup
 
Ejercicios prolog
Ejercicios prologEjercicios prolog
Ejercicios prolog
 

Apunte clase

  • 1. Ejercicio 1 Sea el siguiente tipo: type Punto = (Int,Int) Definir, usando listas por comprensi´n, una lista (infinita) puntosDelPlano::[Punto] que o contenga todos los puntos del cuadrante superior derecho del plano. Atenci´n: la funci´n debe garantizar que eventualmente todo punto del cuadrante o o superior derecho ser´ listado. Una forma de garantizar esto es recorrer los puntos a siguiendo las diagonales x + y = k, con k = 0, 1, 2, 3, . . . (ver el gr´fico). a Ejemplo: [ (0,0), (0,1), (1,0), (0,2), (1,1), (2,0), (0,3), (1,2), (2,1), (3,0), (0,4), ... ] Soluci´n 1 o puntosDelPlano :: [Punto] puntosDelPlano = [(x, y) | k <- [0..], x <- [0..k], y<- [0..k], x + y == k] Soluci´n 2 o puntosDelPlano :: [Punto] puntosDelPlano = [(x,k-x) | k<-[0..], x<-[0..k]] Ejercicio 2 ´ Definimos el siguiente tipo: data Arbol a = Hoja a | Bin (´rbol a) a (´rbol a) A A Ejemplo: mi´rbol = Bin (Hoja 3) 5 (Bin (Hoja 7) 8 (Hoja 1)) A Sea foldAB el siguiente esquema de recursi´n gen´rico para ´rboles: o e a foldAB f g (Hoja n) = f n foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2) En la resoluci´n de este ejercicio, no usar recursi´n expl´ o o ıcita. 1. Decir cu´l es el tipo de las funciones f, g y foldAB. a Soluci´n o a) Miremos foldAB. Sabemos que recibe 3 par´metros: a foldAB :: a -> b -> c -> d 1
  • 2. ´ Por la forma en que esta definida foldAB, sabemos que el 3er par´metro es un Arbol. a Adem´s, sabemos que el primer y segundo par´metro son funciones. a a foldAB :: a -> b -> ´rbol c -> d A b) Sabemos que f (el primer par´metro de foldAB) recibe un s´lo par´metro: a o a foldAB :: (a -> e) -> b -> ´rbol c -> d A Por los usos de f en la definici´n de foldAB debemos pensar que en principio a y e o podr´ ser tipos distintos. ıan c) Sabemos que g (el segundo par´metro de foldAB) recibe tres par´metros: a a foldAB :: (a -> e) -> (b -> h -> i -> j) -> ´rbol c -> d A d ) Mirando: foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2) Vemos que foldAB f g (Bin t1 n t2) es de tipo d (el tipo de retorno de foldAB). Adem´s foldAB f g t1 , foldAB f g t2 y g (foldAB f g t1) n (foldAB f g t2) a tambi´n deben ser del mismo tipo. Por lo tanto: e foldAB :: (a -> e) -> (d -> h -> d -> d) -> ´rbol c -> d A e) Mirando ahora: foldAB f g (Hoja n) = f n y sabiendo que foldAB f g (Hoja n) tiene que ser de tipo d, podemos concluir que f n tambi´n ser´ del mismo tipo. Por lo tanto: e a foldAB :: (a -> d) -> (d -> h -> d -> d) -> ´rbol c -> d A f ) Mirando nuevamente: foldAB f g (Hoja n) = f n Vemos que el par´metro de f es del mismo tipo que los elementos del ´rbol. Lo mismo a a pasa con el segundo par´metro de g en: a foldAB f g (Bin t1 n t2) = g (foldAB f g t1) n (foldAB f g t2) Por lo tanto: foldAB :: (a -> d) -> (d -> a -> d -> d) -> ´rbol a -> d A No podemos deducir nada m´s. Haciendo un renombre de d por b nos queda: a ´ foldAB :: (a ->b) ->(b ->a ->b ->b) ->Arbol a ->b 2. Usando foldAB, definir una funci´n hojas :: ´rbol a ->[a], que devuelva todas las hojas o A de un ´rbol. a ´ Ejemplo: hojas miArbol devuelve [3, 7, 1] 2
  • 3. Soluci´n o hojas = foldAB singleton union where singleton x = [x] union xs x ys = xs ++ ys 3. Usando foldAB, definir una funci´n espejo :: ´rbol a ->´rbol a, que devuelva el ´rbol o A A a que resulte de invertir en todos los niveles el sub´rbol izquierdo por el derecho. a Ejemplo: espejo mi´rbol devuelve el ´rbol Bin (Bin (Hoja 1) 8 (Hoja 7)) 5 (Hoja 3) A a Soluci´n o espejo = foldAB Hoja rbin where rbin t x t’ = Bin t’ x t ´ 4. Usando foldAB, definir una funci´n ramas :: Arbol a -> [[a]], que devuelva la lista de o ramas de un ´rbol. a ´ Ejemplo: ramas miArbol devuelve [[5,3],[5,8,7],[5,8,1]] Soluci´n o ramas = foldAB singleton merge where singleton x = [[x]] merge xs x ys = (map (x:) xs) ++ (map (x:) ys) ramas = foldAB ((:[]).(:[])) merge where merge xs x ys = (map (x:) xs) ++ (map (x:) ys) Ejercicio 3 Dado el siguiente tipo, que representa un ´rbol arbitrario o RoseTree: a data ´rbol a = Rose(a, [´rbol a]) A A deducir el tipo de la siguiente funci´n: o g a f = Rose(a, map (flip g f) (f a)) donde: flip f x y = f y x Soluci´n o Sabemos que g recibe dos par´metros: a g :: a -> b -> c ´ El resultado de g es un Arbol: (por Rose): g :: a -> b -> ´rbol c A 3
  • 4. a o En la expresi´n f a , vemos que f (el segundo par´metro) debe ser una funci´n de por lo o menos un par´metro: a ´ g :: a -> (b -> d) -> Arbol c A su vez, f a es el segundo argumento de map en map (flip g f) (f a) , y por lo tanto debe ser una lista: g :: a -> (b -> [d]) -> ´rbol c A Notemos que el primer par´metro de g sirve como par´metro a f y como elemento del ´rbol a a a resultado, con lo cual: ´ g :: a -> (a -> [d]) -> Arbol a Por otro lado, sabemos que el tipo de flip es: flip :: (a -> b -> c) -> (b -> a -> c) Quiere decir que: flip g :: (a -> [d]) -> a -> ´rbol a A Entonces: flip g f :: a -> ´rbol a A o Como el primer par´metro de map en map (flip g f) (f a) es una funci´n de tipo a a -> ´rbol a, los elementos de la lista f a deben ser de tipo a. Por lo tanto: A g :: a -> (a -> [a]) -> ´rbol a A ´ Podemos ver que todo cierra porque todo el map devuelve [Arbol a], es es lo que necesita ´rbol el constructor Rose de A Ejercicio 4 1. Definir la funci´n: o foldr2:: (a -> b -> c -> c) -> c -> [a] -> [b] -> c Esta funci´n es similar a foldr, pero trabaja sobre dos listas en lugar de una. La funci´n o o que recibe como par´metro se aplica a un elemento de cada lista y al caso base calculado a hasta el momento. Ambas listas son recorridas de derecha a izquierda y la funci´n s´lo debe o o estar definida para listas de igual longitud. Por ejemplo, el resultado de evaluar esta expresi´n: o foldr2 (x y b -> (x,y):b) [] [1,2,3] [‘a’,‘b’,‘c’] es: [(1,‘a’),(2,‘b’),(3,‘c’)] Soluci´n o foldr2:: (a -> b -> c -> c) -> c -> [a] -> [b] -> c foldr2 f b [] [] = b foldr2 f b (x:xs) (y:ys) = f x y (foldr2 f b xs ys) 4
  • 5. 2. Sea el tipo: type Matriz a = [[a]] Utilizando foldr2 y listas por comprensi´n, y sin utilizar recursi´n expl´ o o ıcita, definir el operador: (<*>) :: Matriz a -> Matriz a -> Matriz a Este operador toma dos matrices y devuelve el producto entre ellas. Recordar que el producto entre dos matrices m1 y m2 s´lo est´ definido cuando m1 es de N × M y m2 es de M × T . o a Por ejemplo: 1 2 4 5 7 8 X 1 2 3 4 5 6 = 9 12 15 24 33 42 39 54 69 Ayuda: Se cuenta con la siguiente funci´n: o col :: Int -> Matriz a -> [a] col i = map (!!i) que devuelve la i-´sima columna de una matriz (la primera columna corresponde al 0). e Soluci´n o cols m = [col z m | z <- [0..((length (m!!0)) - 1)]] (<*>) m1 m2 = [ [ foldr2 (x y b -> x*y + b) 0 (m1!!i) ((cols m2)!!j) | j <- [0..(length (cols m2)) - 1] ] | i <- [0..(length m1) - 1] ] i <- [0..(length m1) - 1] es la lista de ´ ındices de filas de m1, es decir 0 . . . N − 1. j <- [0..(length (cols m2)) - 1] es la lista de ´ ındices de columnas de m2, es decir 0 . . . T − 1. La lista interna es una de las filas de la matriz resultado. Cada fila tendr´ T columnas. a La lista de afuera es la lista de filas de la matriz resultado: habr´ N filas, como era de a esperarse. m1!!i es la i-´sima fila de la matriz m1. e cols m2!!j es la j-´sima columna de la matriz m2. e La funci´n (x y b -> x*y + b) toma un elemento de la fila y otro de la columna, los o multiplica entre s´ y los suma al acumulado. ı Quiere decir que cada elemento de la lista de m´s adentro es el resultado de multiplicar a una fila de m1 por una columna de m2. Es decir: (m1 < ∗ > m2)ij = m1ik ∗ m2kj k 5