Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría José Olivares Coronel Modificado hace 10 años
1
Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 2: Funciones, tipos y expresiones 2.1. Funciones 2.2. Tipos 2.3. Tipos de datos recursivos
2
Optimización automática de programas (OAP) Germán Vidal 2 2.1. Funciones Una función puede serUna función puede ser total f: A B parcial f: A B Para ello, debe cumplirPara ello, debe cumplir a A, b B.(a,b) f (a,b’) f b=b’ a A, b B.(a,b) f [(a,b) f f(a) = f a = b] [(a,b) f f(a) = f a = b] La primera condición es necesaria para toda función (total o parcial) y la segunda sólo para las funciones totales t
3
Optimización automática de programas (OAP) Germán Vidal 3 Ejercicio ¿Cómo se puede convertir una función parcial en total?¿Cómo se puede convertir una función parcial en total?
4
Optimización automática de programas (OAP) Germán Vidal 4 Conceptos básicos Igualdad de funciones:Igualdad de funciones: dos funciones f,g: A B son iguales ( f=g ) si a A. f(a) = g(a) a A. f(a) = g(a) Composición de funciones:Composición de funciones: la composición de dos funciones f: A B y g: B C es una nueva función g o f: A C tal que a A. (g o f)(a) = g(f(a)) a A. (g o f)(a) = g(f(a))
5
Optimización automática de programas (OAP) Germán Vidal 5 Funciones finitas:Funciones finitas: dados los elementos a 1,…,a n A y b 1,…,b n B la notación [a 1 b 1,…,a n b n ] representa la función (parcial) g: A B tal que g(x) = b i si x=a i para algún i g(x) = si x a i para todo i Updating:Updating: dada una función f:A B, la notación f[a 1 b 1,…,a n b n ] denota la función g:A B tal que g(x) = b i si x=a i para algún i g(x) = f(x) si x a i para todo i se denomina la “actualización” de f mediante [a i b i ]
6
Optimización automática de programas (OAP) Germán Vidal 6 Funciones vs algoritmosFunciones vs algoritmos las funciones matemáticas no siempre definen un algoritmo (e.g., f(n) = el n-ésimo dígito decimal de ) los algoritmos no tienen porque cumplir la primera condición de toda función (devolver un valor único) (e.g., debido a la E/S o a las variables globales) Ejercicio 2.6:Ejercicio 2.6: ¿Qué conjunto tiene más elementos? Fun = { f | f es una función parcial N N } Prog = { p | p es un programa Pascal que implementa una función N N }
7
Optimización automática de programas (OAP) Germán Vidal 7 2.2. Tipos Tipo = conjunto de valoresTipo = conjunto de valores Expresiones de tipo: Nombres de tipos estándar N (naturales), Z (enteros), B (booleanos), ID (identificadores) Tipos producto Tipos producto: si A1,A2,…,An son tipos, entonces A1 A2 … An es un tipo válido Tipos funcionales Tipos funcionales: si A y B son tipos, entonces A B y A B son tipos válidos orden superior primer ordenUna función f: A B es de orden superior si A o B son de tipo funcional (y de primer orden en otro caso)
8
Optimización automática de programas (OAP) Germán Vidal 8 Ejemplos FuncióntipoFuncióntipo square(x) = x 2 square: N N h(m,n) = m+nh: N N N k(m,n) = (m+n, m-n)k: Z Z Z Z sum(f,x) = f(0)+…+f(x)sum: (N N) N N add(n) = p donde add: N (N N) p(x) = x+n p(x) = x+n twice(f)(x) = f(f(x))twice:(N N) (N N)...
9
Optimización automática de programas (OAP) Germán Vidal 9 Ejercicio 2.2 Escribid funciones que ilustren la diferencia entre los tipos A (B C) y (A B) C
10
Optimización automática de programas (OAP) Germán Vidal 10 Notación currificada Podemos escribir la función suma así:Podemos escribir la función suma así: suma: N N N suma(x,y) = x+y pero también así: add: N (N N) add(x) = p, donde p(y) = x+y Decimos que add es una versión “currificada” de suma (viene de Haskell B. Curry)Decimos que add es una versión “currificada” de suma (viene de Haskell B. Curry)
11
Optimización automática de programas (OAP) Germán Vidal 11 Ejercicio 2.3 Los tipos A (B C) y A B C son parecidos pero no idénticos… Define una función uncurry tal que, si la función f es de tipo A (B C), entonces (uncurry f) será de tipo A B C
12
Optimización automática de programas (OAP) Germán Vidal 12 Inferencia de tipos Notación:Notación: x:t “ x es una variable cuyos valores son de tipo t” e:t “ e es una expresión bien tipada y su valor es de tipo t ” Cuando una expresión contiene variables, necesitamos conocer el “entorno de tipo”Cuando una expresión contiene variables, necesitamos conocer el “entorno de tipo” τ = [x 1 t 1,…,x n t n ] En general, usaremos sentencias de la formaEn general, usaremos sentencias de la forma τ ├ e:t τ ├ e:t para indicar que “en el entorno τ, e está bien tipada y tiene tipo t "
13
Optimización automática de programas (OAP) Germán Vidal 13 Reglas de inferencia de tipos (ejemplos)Reglas de inferencia de tipos (ejemplos) 1. τ[x t] ├ x:t 2. τ ├ e:B τ ├ not e:B 3. τ ├ e 1 :Zτ ├ e 2 :Z τ ├ e 1 + e 2 :Z 4. τ ├ e 1 :t 1 τ ├ e 2 :t 2 τ ├ (e 1,e 2 ):t 1 t 2 5. τ ├ f:t t’τ ├ e:t τ ├ f(e):t’
14
Optimización automática de programas (OAP) Germán Vidal 14 Ejemplos a)Verificar que τ ├ (m+n,m-n): Z Z con el entorno τ = [m Z, n Z] b)Verificar que τ ├ f(f(x)): N con el entorno τ = [f (N N), x N]
15
Optimización automática de programas (OAP) Germán Vidal 15 Ejercicio 2.4 Verificar que, si los argumentos m y n tienen ambos tipo Z, entonces la expresión k(m,n) tiene tipo Z Z transparencia 8 (nota: el tipo de la función k lo podéis encontrar en la transparencia 8)
16
Optimización automática de programas (OAP) Germán Vidal 16 Tipos suma (constructores de datos) Permiten combinar elementos de diferentes tipos mediante el uso de “etiquetas”Permiten combinar elementos de diferentes tipos mediante el uso de “etiquetas” (o símbolos constructores) Ejemplo: ZB = Int Z | Bool BEjemplo: ZB = Int Z | Bool B (e.g., Int 42, Bool true, Int -7, Bool false ) Definición general:Definición general: tipo = C 1 t 11 x … x t 1k 1 | … | … | C n t n1 x … x t nk n | C n t n1 x … x t nk n i.e., el tipo contiene los valores U i=1,…,n {C i (v 1,…,v ki ) | v j :t ij, j = 1,…,k i } U i=1,…,n {C i (v 1,…,v ki ) | v j :t ij, j = 1,…,k i }
17
Optimización automática de programas (OAP) Germán Vidal 17 Tipos suma: ejemplos data ZB = I int | B bool f :: ZB -> ZB f (I n) = I (1-n) f (B b) = B (not b) // f(I(n)) = I(1-n) // f(B(b)) = B(not(b)) data list = Nil | Cons int list length :: list -> int length Nil = 0 length (Cons x xs) = 1 + (length xs)
18
Optimización automática de programas (OAP) Germán Vidal 18 Usamos notación Haskell/ML En los lenguajes funcionales Haskell o ML, las funciones se definen mediante “patrones” en las partes izquierdas:En los lenguajes funcionales Haskell o ML, las funciones se definen mediante “patrones” en las partes izquierdas: length Nil = 0 length (Cons x xs) = 1 + (length xs) En otros lenguajes (e.g., Lisp o Scheme) se suelen utilizar expresiones “case” (u otro tipo de selectores):En otros lenguajes (e.g., Lisp o Scheme) se suelen utilizar expresiones “case” (u otro tipo de selectores): length y = case y of Nil -> 0 Nil -> 0 Cons x xs -> 1 + (length xs) Cons x xs -> 1 + (length xs)
19
Optimización automática de programas (OAP) Germán Vidal 19 2.3. Tipos de datos recursivos Suele ser un tipo suma con recursión en la definición, e.g., data list = Nil | Cons int list El tipo lista es uno de los tipos de datos recursivos más usados! NotaciónNotación A* o [A] denota una lista de elementos de tipo A Cons(a1,Cons(a2,Nil)) = [a1,a2] Nil = [], [a1,a2] = (a1:(a2:[])) [x|xs] = (x:xs) operadores típicos: head / tail
20
Optimización automática de programas (OAP) Germán Vidal 20 Árboles sintácticos A menudo, se emplean para hacer más clara la estructura de una expresión EjemploEjemplo: dado el tipo de datos data exp = I int | Sum exp exp | Sum exp exp | Mul exp exp | Mul exp exp la estructura de la expresión Sum(I(5),Mul(I(6),I(7))) (i.e., 5+(6*7)) se visualiza mejor así:
21
Optimización automática de programas (OAP) Germán Vidal 21 Árboles sintácticos (cont.) Sum IMul 5II 67
22
Optimización automática de programas (OAP) Germán Vidal 22 Ejercicio 2.5 Define un tipo de datos recursivo Bintree para representar árboles binarios cuyas hojas sean enteros Define también una función add de tipo Bintree int tal que (add tree) nos devuelva la suma de todas las hojas del árbol tree
23
Optimización automática de programas (OAP) Germán Vidal 23 Ejercicio Declara su tipo de datos e implementa las siguientes funciones last : toma una lista y devuelve el último elemento reverse : toma una lista y devuelve su inversa concat : concatena dos listas map : toma una función (unaria) y una lista y devuelve la lista resultante de aplicar la función a cada elemento de la lista
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.