martes, 16 de mayo de 2017

Cómo programar: datos simples (12) - Función "yell" (grito)

Este es un ejemplo del uso de la receta de diseño de funciones.  Se quiere crear una función llamada yell (grito), la cual añade el simbolo ! al final de cualquier palabra introducida por el usuario:

;String --> String   -->  consume texto y produce texto --> Firma (signature)
; Añade "!" al final de una palabra  --> Próposito (purpose)
;se crea un borrador de la función (stub):
(define (yell s) " ")

; Ejemplos:
(check-expect (yell "hello") "hello!") ; la función yell con un argumento "hello" debería producir "hello!"
(check-expect (yell "bye") "bye!") ; la función yell con un argumento "bye" debería producir "bye!"

Al ejecutar este código se tiene lo siguiente:














La función creada anteriormente solo produce un espacio " ", el cual es diferente a los valores esperados "hello!" y "bye!". No obstante, no produce ningún error de escritura, por lo que hasta el momento la función esta bien planteada.

Si hubiese omitido el paréntesis en el segundo ejemplo, se habría generado un error:


Por lo tanto, es importante ejecutar el código de forma seguida, para ir detectando los errores.

Siguiendo con el ejemplo y habiendo visto que no hay errores de escritura, se pone el stub como comentario (colocando un punto y coma al comienzo), para deshabilitarlo y crear posteriormente la función completa:

;(define (yell s) " ")

El código completo quedaría así:

;String --> String   -->  consume texto y produce texto --> Firma (signature)
; Añade "!" al final de una palabra  --> Próposito (purpose)
;se crea un borrador de la función (stub):
;(define (yell s) " ")

; Ejemplos:
(check-expect (yell "hello") "hello!") ; la función yell con un argumento "hello" debería producir "hello!"
(check-expect (yell "bye") "bye!") ; la función yell con un argumento "bye" debería producir "bye!"

Ahora se añade la plantilla al código. para este curso existe un documento con las plantillas disponibles, por ahora, se utiliza esta plantilla para datos simples:

(define (yell s )
 (... s))

El código completo sigue así:

;String --> String   -->  consume texto y produce texto --> Firma (signature)
; Añade "!" al final de una palabra  --> Próposito (purpose)
;se crea un borrador de la función (stub):
;(define (yell s) " ")

;Plantilla (template)
(define (yell s )
 (... s))

; Ejemplos:
(check-expect (yell "hello") "hello!") ; la función yell con un argumento "hello" debería producir "hello!"
(check-expect (yell "bye") "bye!") ; la función yell con un argumento "bye" debería producir "bye!"


Para construir la función completa, se observan los ejemplos antes planteados, de los cuales se puede deducir que basta con añadir el simbolo ! al argumento de la función. La unión de texto se realiza con la función string-append.

Conforme a lo anterior, se procede a copiar la plantilla y modificarla, para dejarla así:

(define (yell s )
 (string-append s "!") )

El código completo quedaría asi:

;String --> String   -->  consume texto y produce texto --> Firma (signature)
; Añade "!" al final de una palabra  --> Próposito (purpose)
;se crea un borrador de la función (stub):
;(define (yell s) " ")

;Plantilla (template)
;(define (yell s )  -> se pone punto y coma al comienzo para dejarla como comentario
 ;(... s))

;Función
(define (yell s )
 (string-append s "!") )

; Ejemplos:
(check-expect (yell "hello") "hello!") ; la función yell con un argumento "hello" debería producir "hello!"
(check-expect (yell "bye") "bye!") ; la función yell con un argumento "bye" debería producir "bye!"


y el resultado final es el siguiente:



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