optimizaci n autom tica de programas
Download
Skip this Video
Download Presentation
Optimización automática de programas

Loading in 2 Seconds...

play fullscreen
1 / 23

Optimización automática de programas - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

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’

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Optimización automática de programas' - chiquita-lane


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
optimizaci n autom tica de programas

Optimización automática de programas

Tema 2: Funciones, tipos y expresiones

2.1. Funciones

2.2. Tipos

2.3. Tipos de datos recursivos

Germán Vidal

2 1 funciones
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’
    • aA, bB.(a,b)f

[(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

Germán Vidal

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

Germán Vidal

conceptos b sicos
Conceptos básicos
  • Igualdad de funciones:
    • dos funciones f,g: A  B son iguales (f=g) si

aA. f(a) = g(a)

  • 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))

Germán Vidal

slide5
Funciones finitas:
    • dados los elementos

a1,…,anA y b1,…,bnB

la notación

[a1 b1,…,an bn]

representa la función (parcial) g: A  B tal que

g(x) = bi si x=ai para algún i

g(x) =  si xai para todo i

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

f[a1 b1,…,an bn]

denota la función g:A  B tal que

g(x) = bi si x=ai para algún i

g(x) = f(x) si xai para todo i

se denomina la “actualización” de f mediante [ai bi]

Germán Vidal

slide6
Funciones 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:

¿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 }

Germán Vidal

2 2 tipos
2.2. Tipos
  • Tipo = conjunto de valores
  • Expresiones de tipo:
    • Nombres de tipos estándar

N (naturales), Z (enteros), B (booleanos), ID (identificadores)

    • Tipos producto: si A1,A2,…,An son tipos, entonces A1  A2  …  An es un tipo válido
    • Tipos funcionales: si A y B son tipos, entonces A  B y A  B son tipos válidos
  • Una función f: A  Bes de orden superior si A o B son de tipo funcional (y de primer orden en otro caso)

Germán Vidal

ejemplos
Ejemplos
  • Función tipo

square(x) = x2 square: N  N

h(m,n) = m+n h: 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

twice(f)(x) = f(f(x)) twice:(NN)  (NN)

...

Germán Vidal

ejercicio 2 2
Ejercicio 2.2
  • Escribid funciones que ilustren la diferencia entre los tipos

A  (B  C)

y

(A  B)  C

Germán Vidal

notaci n currificada
Notación currificada
  • 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)

Germán Vidal

ejercicio 2 3
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

Germán Vidal

inferencia de tipos
Inferencia de tipos
  • 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”

τ = [x1 t1,…,xn tn]

  • En general, usaremos sentencias de la forma

τ├ e:t

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

Germán Vidal

slide13
Reglas de inferencia de tipos (ejemplos)
    • τ[x  t]├ x:t
    • τ├ e:B

τ├ not e:B

    • τ├ e1:Z τ├ e2:Z

τ├ e1 + e2:Z

    • τ├ e1:t1τ├ e2:t2

τ├ (e1,e2):t1 t2

    • τ├ f:t  t’ τ├ e:t

τ├ f(e):t’

Germán Vidal

ejemplos1
Ejemplos
  • Verificar que

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

con el entorno

τ = [m  Z, n  Z]

  • Verificar que

τ├ f(f(x)): N

con el entorno

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

Germán Vidal

ejercicio 2 4
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 8)

Germán Vidal

tipos suma constructores de datos
Tipos suma (constructores de datos)
  • Permiten combinar elementos de diferentes tipos mediante el uso de “etiquetas”

(o símbolos constructores)

  • Ejemplo: ZB = Int Z | Bool B

(e.g., Int 42, Bool true, Int -7, Bool false)

  • Definición general:

tipo = C1 t11 x … x t1k1

| …

| Cn tn1 x … x tnkn

i.e., el tipo contiene los valores

Ui=1,…,n {Ci(v1,…,vki) | vj:tij, j = 1,…,ki}

Germán Vidal

tipos suma ejemplos
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)

Germán Vidal

usamos notaci n haskell ml
Usamos notación Haskell/ML
  • 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):

length y = case y of

Nil -> 0

Cons x xs -> 1 + (length xs)

Germán Vidal

2 3 tipos de datos recursivos
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ó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

Germán Vidal

rboles sint cticos
Árboles sintácticos
  • A menudo, se emplean para hacer más clara la estructura de una expresión
  • Ejemplo: dado el tipo de datos

data exp = I int

| Sum 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í:

Germán Vidal

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

Sum

I Mul

5 I I

6 7

Germán Vidal

ejercicio 2 5
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

Germán Vidal

ejercicio1
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

Germán Vidal

ad