Se comenzará con un problema mas o menos planteado, el cual se refinará posteriormente:
El siguiente código sobre la simulación de las luces de un semáforo:
;Natural --> Natural
;Produce el siguiente color de un semáforo
;define (next-color c) 0) ; stub (colilla)
;Plantilla
#;(define (next-color c )
(... c))
;Función
(define (next-color c)
(cond [ (= c 0) 2 ]
[ (= c 1) 0 ]
[ (= c 2) 1 ] ))
;Ejemplos
(check-expect (next-color 0) 2)
(check-expect (next-color 1) 0)
(check-expect (next-color 2) 1)
Al ejecutarse el anterior código todas las tres pruebas pasan satisfactoriamente. Sin embargo, es poco lo que se entiende del mismo. Al examinar cada parte del código se observa lo siguiente:
- La firma indica que con un número natural se produce un número natural.
- El próposito dice que se produce el siguiente color de un semáforo. ¿que tiene que ver un color con - un número natural?
- La función "next-color" con un argumento 0 produce 2, con un argumento 1 produce 0, y con un argumento 2 produce 1. ¿que significa eso?
Para entender lo anterior, hay que conocer el dominio del problema. El dominio se refiere al campo de aplicación, en este caso, la simulación de las luces de un semáforo.
El dominio tambien se compone de la información y de los datos que representarán esta información.
Por ejemplo:
Información: Una luz roja de un semáforo
Datos: El cero representa la luz roja del semáforo
La representación de la información se conoce tambien como definición de datos. En la definición de datos se colocan los comentarios que definen un nuevo tipo de datos. Estos comentarios muestran como formar tipos de datos.
En la definición de datos tambien se incluye la interpretación, la cual explica como interpretar los tipos de datos creados. Esto ayuda a crear una asociación entre la información y los datos que la representan.
De acuerdo a lo anterior, el código quedaría así:
; Definición de datos
;La siguiente línea es un comentario del tipo de datos llamado "TLColor" (traffic light color o color de luz del semáforo). TLColor es un tipo de datos "atomic non-distinct", es decir, un valor simple que representa información:
;TLColor es uno de:
; - 0
; - 1
; - 2
; Interpretación: TLColor representa un solo color de luz de un semáforo: 0 es rojo, 1 es amarillo y 2 es verde.
;Plantilla tomada de la definición de datos simples (data driven templates/atomic non-distinct):
#; (define (fn-for-tlcolor c)
(cond [ (= c 0) (....) ]
[ (= c 1) (...) ]
[ (= c 2) (...) ] )
;Definición de la función
;La función ahora se alimenta del tipo de datos creado anteriormente:
;TLColor--> TLColor
; Produce el siguiente color de un semáforo.
;define (next-color c) 0) ; stub
;Plantilla tomada de TLColor: se cambia el nombre de "fn-for-tlcolor c" a "next-color c":
#; (define (next-color c)
(cond [ (= c 0) (....) ]
[ (= c 1) (...) ]
[ (= c 2) (...) ] )
;Función completa:
(define (next-color c)
(cond [ (= c 0) 2 ]
[ (= c 1) 0 ]
[ (= c 2) 1 ]))
;Ejemplos
(check-expect (next-color 0) 2) ;con un argumento 0 (luz roja), produce 2 (luz verde)
(check-expect (next-color 1) 0); con un argumento 1 (luz amarilla), produce 0 (luz roja)
(check-expect (next-color 2) 1); con un argumento 2 (luz verde), produce 1 (luz amarilla)
Esta función no puede utilizar el 3 como argumento! Por ahora, dejémosla así.
En resumen:
La definición de datos describe:
- Como formar datos de un nuevo tipo
- Como representar información como datos
- Como interpretar los datos como información
- Las plantillas que se utilizaran para operar sobre tipos de datos
La definición de datos simplifica la función:
- restringe los datos consumidos
- restringe los datos producidos
- Ayuda a generar ejemplos
- Proporciona plantillas
Anterior
Siguiente
Apuntes del lenguaje de programación "Racket", tomados del curso virtual "How to code: simple data", que hace parte de la serie "Software development", impartida por University of British Columbia a través de edx.org. A este curso se puede acceder de forma gratuita. Los apuntes los estaré colocando en la médida que vaya avanzando en el curso.
Suscribirse a:
Enviar comentarios (Atom)
Cómo programar: datos simples (21) - Enumeración
Diseñar una definición de datos para representar las letras de calificaciones en un curso. Estas letras son A, B y C, que significan bueno,...
No hay comentarios:
Publicar un comentario