23
Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 2: Funciones, tipos y Tema 2: Funciones, tipos y expresiones expresiones 2.1. Funciones 2.2. Tipos 2.3. Tipos de datos recursivos

Optimización automática de programas

Embed Size (px)

DESCRIPTION

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.1. Funciones. t. Una función puede ser total f: A  B parcial f: A  B Para ello, debe cumplir aA,bB.(a,b)f  (a,b’) f  b=b’ - PowerPoint PPT Presentation

Citation preview

Optimización automática de programas (OAP) Germán Vidal 1

Optimización automática de programas

Tema 2: Funciones, tipos y expresionesTema 2: Funciones, tipos y expresiones

2.1. Funciones

2.2. Tipos

2.3. Tipos de datos recursivos

Optimización automática de programas (OAP) Germán Vidal 2

2.1. Funciones2.1. Funciones

• Una función puede serUna función puede ser total total f: A f: A B Bparcialparcial f: A f: A B B

• Para ello, debe cumplirPara ello, debe cumplir aaA,A,bbB.(a,b)B.(a,b)f f (a,b’) (a,b’) f f b=b’ b=b’ aaA, A, bbB.(a,b)B.(a,b)ff

[(a,b)[(a,b)f f f(a) = f a f(a) = f a = b]= b]

La primera condición es necesaria para toda función (total La primera condición es necesaria para toda función (total o parcial) y la segunda sólo para las funciones totaleso parcial) y la segunda sólo para las funciones totales

tt

Optimización automática de programas (OAP) Germán Vidal 3

EjercicioEjercicio

• ¿Cómo se puede convertir una función parcial ¿Cómo se puede convertir una función parcial en total?en total?

Optimización automática de programas (OAP) Germán Vidal 4

Conceptos básicosConceptos básicos

• Igualdad de funcionesIgualdad de funciones:: dos funciones dos funciones f,g: A f,g: A B B son iguales ( son iguales (f=gf=g) si) si

aaA. f(a) = g(a)A. f(a) = g(a)

• Composición de funcionesComposición de funciones:: la composición de dos funciones la composición de dos funciones f: A f: A B B y y g: B g: B C C

es una nueva función es una nueva función g g oo f: A f: A C C tal que tal que

aaA. (g A. (g oo f)(a) = g(f(a)) f)(a) = g(f(a))

Optimización automática de programas (OAP) Germán Vidal 5

• Funciones finitasFunciones finitas:: dados los elementos dados los elementos

aa11,…,a,…,annAA y y bb11,…,b,…,bnnBBla notación la notación

[a[a11 b b11,…,a,…,ann b bnn]] representa la función (parcial) representa la función (parcial) g: A g: A B B tal que tal que

g(x) = bg(x) = bii si x=asi x=aii para algún i para algún i

g(x) = g(x) = si xsi xaaii para todo i para todo i

• UpdatingUpdating:: dada una función dada una función f:A f:A B, B, la notación la notación

f[af[a11 b b11,…,a,…,ann b bnn]]denota la función denota la función g:A g:A B B tal que tal que

g(x) = bg(x) = bii si x=asi x=aii para algún i para algún i

g(x) = f(x) g(x) = f(x) si xsi xaaii para todo i para todo i

se denomina la “actualización” de se denomina la “actualización” de ff mediante mediante [a[aii b bii]]

Optimización automática de programas (OAP) Germán Vidal 6

• Funciones vs algoritmosFunciones vs algoritmos las funciones matemáticas no siempre definen un las funciones matemáticas no siempre definen un

algoritmoalgoritmo

(e.g., f(n) = el n-ésimo dígito decimal de (e.g., f(n) = el n-ésimo dígito decimal de )) los algoritmos no tienen porque cumplir la primera los algoritmos no tienen porque cumplir la primera

condición de toda función (devolver un valor único)condición de toda función (devolver un valor único)

(e.g., debido a la E/S o a las variables globales)(e.g., debido a la E/S o a las variables globales)

• Ejercicio 2.6Ejercicio 2.6: : ¿Qué conjunto tiene más elementos?¿Qué conjunto tiene más elementos?

Fun = { f | f es una función parcial N Fun = { f | f es una función parcial N N } N }

Prog = { p | p es un programa Pascal que implementa una Prog = { p | p es un programa Pascal que implementa una

función N función N N }N }

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ándarNombres de tipos estándarN (naturales), Z (enteros), B (booleanos), ID (identificadores)

Tipos productoTipos producto: si A1,A2,…,An son tipos, entonces A1 A2 … An es un tipo válido

Tipos funcionalesTipos funcionales: si A y B son tipos, entonces A

B y A B son tipos válidos

• Una función f: A B es de orden superiororden superior si A o B son de tipo funcional (y de primer ordenprimer orden en otro caso)

Optimización automática de programas (OAP) Germán Vidal 8

Ejemplos

• FunciónFunción tipotipo

square(x) = xsquare(x) = x22 square: N square: N N N

h(m,n) = m+nh(m,n) = m+n h: N h: N N N N N

k(m,n) = (m+n, m-n)k(m,n) = (m+n, m-n) k: Z k: Z Z Z Z Z Z Zsum(f,x) = f(0)+…+f(x)sum(f,x) = f(0)+…+f(x) sum: (Nsum: (NN) N) N N N N

add(n) = p donde add(n) = p donde add: N add: N (N (N N) N)

p(x) = x+np(x) = x+n

twice(f)(x) = f(f(x))twice(f)(x) = f(f(x)) twice:(Ntwice:(NN) N) (N(NN)N)

......

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

Optimización automática de programas (OAP) Germán Vidal 10

Notación Notación currificadacurrificada

• Podemos escribir la función suma así:Podemos escribir la función suma así:suma: N suma: N N N N N

suma(x,y) = x+ysuma(x,y) = x+y

pero también así:pero también así:add: N add: N (N (N N) N)

add(x) = p, donde p(y) = x+yadd(x) = p, donde p(y) = x+y

• Decimos que Decimos que addadd es una versión “currificada” es una versión “currificada” de de sumasuma (viene de Haskell B. (viene de Haskell B. CurryCurry))

Optimización automática de programas (OAP) Germán Vidal 11

Ejercicio 2.3

• Los tiposA (B C)

yA 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

Optimización automática de programas (OAP) Germán Vidal 12

Inferencia de tiposInferencia de tipos• Notación:Notación:

x:tx:t ““xx es una variable cuyos valores son de tipo es una variable cuyos valores son de tipo t”t” e:te:t ““ee es una expresión bien tipada y su valor es de es una expresión bien tipada y su valor es de

tipo tipo tt””

• Cuando una expresión contiene variables, necesitamos Cuando una expresión contiene variables, necesitamos conocer el “entorno de tipo” conocer el “entorno de tipo”

ττ = [x = [x11 t t11,…,x,…,xnn t tnn]]

• En general, usaremos sentencias de la formaEn general, usaremos sentencias de la forma ττ ├├ e:t e:t

para indicar que “en el entorno para indicar que “en el entorno ττ, , ee está bien tipada y está bien tipada y tiene tipo tiene tipo tt""

Optimización automática de programas (OAP) Germán Vidal 13

• Reglas de inferencia de tipos (ejemplos)Reglas de inferencia de tipos (ejemplos)

1.1. ττ[x [x t] t] ├├ x:t x:t

2.2. ττ ├├ e:B e:Bττ ├├ not e:B not e:B

3.3. ττ ├├ e e11:Z:Z ττ ├├ e e22:Z:Z

ττ ├├ e e11 + e + e22:Z:Z

1.1. ττ ├├ e e11:t:t11 ττ ├├ e e22:t:t22

ττ ├├ (e (e11,e,e22):t):t11 t t22

3.3. ττ ├├ f:t f:t t’ t’ ττ ├├ e:t e:tττ ├├ f(e):t’ f(e):t’

Optimización automática de programas (OAP) Germán Vidal 14

Ejemplosa)a) Verificar que Verificar que

ττ ├├ (m+n,m-n): Z (m+n,m-n): Z Z Z

con el entornocon el entorno

ττ = [m = [m Z, n Z, n Z] Z]

b)b) Verificar que Verificar que ττ ├├ f(f(x)): N f(f(x)): N

con el entornocon el entorno

ττ = [f = [f (N (N N), x N), x N] N]

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

(nota: el tipo de la función k lo podéis encontrar en la transparencia 8transparencia 8)

Optimización automática de programas (OAP) Germán Vidal 16

Tipos suma (constructores de datos)Tipos suma (constructores de datos)

• Permiten combinar elementos de diferentes Permiten combinar elementos de diferentes tipos mediante el uso de “etiquetas” tipos mediante el uso de “etiquetas” (o símbolos constructores)(o símbolos constructores)

• Ejemplo: Ejemplo: ZB = Int Z | Bool BZB = Int Z | Bool B(e.g., (e.g., Int 42, Bool true, Int -7, Bool falseInt 42, Bool true, Int -7, Bool false))

• Definición general:Definición general:tipo = Ctipo = C11 t t1111 x … x t x … x t1k1k11

| … | …

| C| Cnn t tn1n1 x … x t x … x tnknknn

i.e., el tipo contiene los valoresi.e., el tipo contiene los valores UUi=1,…,ni=1,…,n {C {Cii(v(v11,…,v,…,vkiki) | v) | vjj:t:tijij, j = 1,…,k, j = 1,…,kii}}

Optimización automática de programas (OAP) Germán Vidal 17

Tipos suma: ejemplosTipos suma: ejemplosdata ZB = I int | B booldata ZB = I int | B boolf :: ZB -> ZBf :: ZB -> ZBf (I n) = I (1-n)f (I n) = I (1-n)f (B b) = B (not b)f (B b) = B (not b)

// f(I(n)) = I(1-n)// f(I(n)) = I(1-n)// f(B(b)) = B(not(b))// f(B(b)) = B(not(b))

data list = Nil | Cons int listdata list = Nil | Cons int listlength :: list -> intlength :: list -> intlength Nil = 0length Nil = 0length (Cons x xs) = 1 + (length xs)length (Cons x xs) = 1 + (length xs)

Optimización automática de programas (OAP) Germán Vidal 18

Usamos notación Haskell/MLUsamos notación Haskell/ML• En los lenguajes funcionales Haskell o ML, las En los lenguajes funcionales Haskell o ML, las

funciones se definen mediante “patrones” en las funciones se definen mediante “patrones” en las partes izquierdas:partes izquierdas:length Nil = 0length Nil = 0length (Cons x xs) = 1 + (length xs)length (Cons x xs) = 1 + (length xs)

• En otros lenguajes (e.g., Lisp o Scheme) se En otros lenguajes (e.g., Lisp o Scheme) se suelen utilizar expresiones “case” (u otro tipo de suelen utilizar expresiones “case” (u otro tipo de selectores):selectores):length y = case y oflength y = case y of

Nil -> 0Nil -> 0 Cons x xs -> 1 + (length xs)Cons x xs -> 1 + (length xs)

Optimización automática de programas (OAP) Germán Vidal 19

2.3. Tipos de datos recursivos2.3. Tipos de datos recursivos• Suele ser un tipo suma con recursión en la

definición, e.g.,data list = Nil | Cons int listdata list = Nil | Cons int list

• El tipo lista es uno de los tipos de datos recursivos más usados!

• NotaciónNotación A*A* o o [A][A] denota una lista de elementos de tipo denota una lista de elementos de tipo AA Cons(a1,Cons(a2,Nil)) = [a1,a2]Cons(a1,Cons(a2,Nil)) = [a1,a2] Nil = [], [a1,a2] = (a1:(a2:[]))Nil = [], [a1,a2] = (a1:(a2:[])) [x|xs] = (x:xs)[x|xs] = (x:xs) operadores típicos:operadores típicos: head / tail head / tail

Optimización automática de programas (OAP) Germán Vidal 20

Árboles sintácticosÁrboles sintácticos

• A menudo, se emplean para hacer más clara la estructura de una expresión

• EjemploEjemplo: dado el tipo de datosdata exp = I int data exp = I int

| Sum exp exp | Sum exp exp

| Mul exp exp| Mul exp exp

la estructura de la expresiónSum(I(5),Mul(I(6),I(7))) Sum(I(5),Mul(I(6),I(7))) (i.e., 5+(6*7))(i.e., 5+(6*7))

se visualiza mejor así:

Optimización automática de programas (OAP) Germán Vidal 21

Árboles sintácticos (cont.)Árboles sintácticos (cont.)

SumSum

II MulMul

55 II II

66 77

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

Optimización automática de programas (OAP) Germán Vidal 23

Ejercicio

• Declara su tipo de datos e implementa las siguientes funcioneslast: toma una lista y devuelve el último

elementoreverse: toma una lista y devuelve su

inversaconcat: concatena dos listasmap: toma una función (unaria) y una lista

y devuelve la lista resultante de aplicar la función a cada elemento de la lista