viernes, 26 de mayo de 2017

Cómo programar: datos simples (18) - Plantillas orientadas por datos

El curso proporciona unas plantillas de funciones que operan sobre distintos tipos de datos. Dependiendo del tipo de datos utilizado en la resolución del problema, se escoge la plantilla asociada a ese tipo de datos.

Ejemplo:

Se requiere diseñar la definición de datos para representar el nombre de una ciudad y así obtener la plantilla de la función que opera sobre dicho tipo de datos.

El dominio del problema es el siguiente:

Nombre de una ciudad

Información:
Vancouver
Boston

Datos:
"Vancouver"
"Boston"

Basados en lo anterior, se comienza haciendo un comentario para formar el nuevo tipo de datos. En este ejemplo el tipo de datos se llamará CityName (nombre de la ciudad), el cual es una cadena de texto (string):

; CityName is String
; interpretación: El nombre de una ciudad

Luego, se crean dos constantes que representan ejemplos:

(define CN1 "Boston")
(define CN2 "Vancouver")

Una vez creados los ejemplos, se ingresa al banco de plantillas orientadas por datos (data driven templates).

Allí se busca el siguiente cuadro:











El anterior cuadro proporciona una plantilla genérica  con el código:

(define (fn-for-type-name x)
  <body> )


Este código define una función con un solo argumento "x" y un cuerpo <body> . Dicho cuerpo se ajusta de acuerdo al tipo de datos que deseamos trabajar.

Ahora bien, para este caso, una ciudad como "Vancouver" corresponde a un tipo de datos atómico no-distinto (atomic non-distinct), es decir, es un tipo de dato que no puede descomponerse en otras piezas más pequeñas (irreducible).

Este tipo de datos se busca en la plantilla antes mencionada, y de allí se toma la plantilla del cuerpo de la función  (ver la tercer columna "body or cond answer"): 



De acuerdo a lo anterior, el cuerpo de la función para un tipo de datos atomic non-distinct es el siguiente:

(...x)


Ese código ahora debe incluirse en el formato genérico antes señalado:

(define (fn-for-type-name x)
  <body> )

Para ello, se reemplaza <body> con el cuerpo de la función para un tipo de datos atomic non-distinct, que es  (... x) , para asi obtener la siguiente plantilla de código asociada al tipo de datos atomic non-distinct, según se indica abajo:


(define (fn-for-type-name x)
(... x)  ) 

Se reemplaza "fn-for-type-name" por el nombre del tipo de datos definido, que en este caso es city-name. De igual manera el argumento "x" puede reemplazarse por cn (city name). Conforme a lo anterio, el código quedaría asi:


(define (fn-for-city-name cn)
(... cn)  )


En resumen, se puede decir que una definición de datos consta de cuatro o cinco partes:

1) Una posible definición de una estructura (no visto hasta ahora, más adelante se verá en detalle)
2) Un comentario de tipo que define un nuevo nombre para el tipo de datos y describe como formar datos.
3) Una interpretación que describe la correspondencia entre información y datos
4) Uno o más ejemplos de los datos.
5) Una plantilla de una función que opera sobre el tipo de datos antes definido.

Anterior
Siguiente

No hay comentarios:

Publicar un comentario

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,...