Está en la página 1de 13

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.

ar/ --- Colaborá con tus apuntes


por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr

Dante Zanarini
16 de abril de 2019
Estructuras

1
Necesitamos más información en el estado

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr

• Pensemos en los ejercicios de la práctica 3


• ¿Por qué los objetos no se muevan en dos direcciones?
• ¿Y si queremos que el objeto cambie de color?
• Repasemos los otros ejemplos y veamos qué nos gustaría
agregarle al estado

2
Necesitamos agrupar información

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr
• Más allá de los programas interactivos, hay otras
situaciones en las que necesitamos
agrupar datos.
• Supongamos que queremos representar:
Una agenda,
el catálogo de una biblioteca,
colores,
puntos en el plano,
...

3
Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr
Una estructura bien simple

• Volvamos al ejercicio del círculo en la práctica 3.


• Necesitamos representar una posición en el plano

4
Una estructura bien simple

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr
• Volvamos al ejercicio del círculo en la práctica 3.
• Necesitamos representar una posición en el plano

• Cómo representamos esta información?

• Echémosle un vistazo a la estructura posn

5
Una estructura bien simple

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr
• Volvamos al ejercicio del círculo en la práctica 3.
• Necesitamos representar una posición en el plano

• Cómo representamos esta información?

• Echémosle un vistazo a la estructura posn

• Usando posn podemos repensar el ejercicio 4,


para mover el objeto en ambas direcciones...

6
Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr
• Racket nos permite definir
De dónde sale posn?

nuevos tipos de datos, agrupando los ya conocidos

7
Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr

• En el caso de posn:
• Racket nos permite definir

(define-struct posn [x y])


De dónde sale posn?

nuevos tipos de datos, agrupando los ya conocidos

8
De dónde sale posn?

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
• Racket nos permite definir

por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr


nuevos tipos de datos, agrupando los ya conocidos

• En el caso de posn:
(define-struct posn [x y])

• En general:
(define-struct Nombre [Campo1 ... CampoN])

• La palabra clave define-struct indica que estamos definiendo un


nuevo tipo de datos

• Luego indicamos su nombre, ( Nombre)

• Finalmente, una lista con los nombres de los campos que incluye la
estructura 9
Qué hacemos cuando definimos una estructura?

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
(define-struct Nombre [Campo1 ... CampoN])

por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr


• Se incorporan varias funciones:
Un constructor que permite crear elementos
en el nuevo tipo.
Un selector por cada campo. Permiten
observar el valor de cada uno.
Un predicado que distingue instancias de la
clase creada de otros objetos.

10
Qué hacemos cuando definimos una estructura?

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
(define-struct Nombre [Campo1 ... CampoN])

por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr


• Se incorporan varias funciones:
Un constructor que permite crear elementos
en el nuevo tipo.
Un selector por cada campo. Permiten
observar el valor de cada uno.
Un predicado que distingue instancias de la
clase creada de otros objetos.

• Repasemos todo esto con posn

11
Otras estructuras...

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
(define-struct contacto [nombre tel mail])

por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr


; contacto es (make-contacto String String String)

• constructor: make-contacto
Ejemplo:
(make-contacto "Juan" "3416-342356" "jj@gmx.net")

• selectores: contacto-nombre,
contacto-tel y contacto-mail
Ejemplo:
(contacto-mail (make-contacto "Juan" "3416-342356" "jj@gmx.net"))

• predicado: contacto?. Funciona como los


predicados para los tipos de datos conocidos.

12
Leyes de evaluación...

Material descargado de la Apunteca de la 15 de Junio http://www.15dejuniomnr.com.ar/ --- Colaborá con tus apuntes
• Las leyes de evaluación para estructuras

por mail a 15dejuniomnr@gmail.com o escribinos por IG: https://www.instagram.com/15dejunio.mnr


relacionan el constructor con los selectores
• Por ejemplo, para la estructura posn :

(posn-x (make-posn a b))


== ley 1
a

(posn-y (make-posn a b))


== ley 2
b

• Observemos que un elementos de la forma


(make-posn a b) ya está en forma canónica y
no requiere ser evaluado.
13

También podría gustarte