Repaso
Students analyze the behavior of a piecewise function
Objetivos de aprendizaje
Students learn the concept of piecewise functions
Students learn about conditionals (how to write piecewise functions in code)
Declaraciones de evidencia
Students will understand that functions can perform different computations based on characteristics of their inputs
Students will begin to see how Examples indicate the need for piecewise functions
Students will understand that cond statements capture pairs of questions and answers when coding a piecewise function
Resultados del Producto
Materiales
Entorno de edición (WeScheme o DrRacket con el bootstrap-teachpack instalado)
El Libro de Trabajo del estudiante.
Lapiceros/lápices para los estudiantes, marcadores de pizarra para profesores
Cartel de clase (Lista de reglas, tabla de lenguaje, calendario del curso)
Tabla de Lenguaje (Vea abajo)
Preparación
Los estudiantes están registrados en WeScheme.org, o han abierto DrRacket.
"Luigi’s Pizza" [LuigisPizza.rkt de source-files.zip | WeScheme] precargado en las máquinas de los estudiantes y en el proyector.
REQUERIDO: Reparta la Hoja de Actividades de la Pizza de Luigi.
Para iniciar con esta lección, completa La hoja de Trabajo de la Pizza de Luigi.
El código para la función de (costo) cost está escrito abajo:
[Video]
Hasta ahora, todas las funciones que has visto han hecho lo mismo con sus entradas:
green-triangle siempre hizo triángulos verdes, no importa cuál era el tamaño.
safe-left? siempre comparó la coordenada de entrada a -50, sin importar cuál era la entrada.
update-danger siempre agregó o restó la misma cantidad
y así...
Esto fue evidente al pasar de los EJEMPLOS a la definición de la función: circundando lo que cambia esencialmente da la definición, y el número de variables siempre coincidirá con el número de cosas en el Dominio.Ve a la Página 1, rellena el Contrato y los EJEMPLOS para esta función, luego marca con un círculo y etiqueta lo que cambia.
It may be worthwhile to have some EXAMPLEs and definitions written on the board, so students can follow along.
La función de cost es especial, porque diferentes coberturas pueden resultar en expresiones totalmente diferentes que se están evaluando. Si fueras a marcar en un círculo todo lo que cambia en el ejemplo, tendrías las coberturas y el precio marcados en un círculo. Esas son dos cosas variables, pero el Dominio de la función solo tiene una cosa en si - por lo tanto ,no podemos tener dos variables.
Have students refer back to prior Design Recipe pages - it is essential that they realize that this is a fundamentally new situation, which will require a new technique in the Design Recipe!
Por supuesto, el price no es realmente una variable independiente, ya que el precio depende totalmente de la topping. Por ejemplo: Si la cobertura es "cheese" la función simplemente producirá 9.00, si la cobertura es "pepperoni" la función simplemente producirá 10.50, y así sucesivamente. El precio todavía se define en términos de la cobertura, y hay cuatro posibles coberturas - cuatro posibles condiciones - de las que la función necesita preocuparse. La función de cost hace uso de una característica especial del lenguaje denominada condicional, que se abrevia en el código como cond.
- Cada condicional tiene al menos una cláusula. Cada cláusula tiene una pregunta Booleana como resultado. En la función de Luigi, hay una cláusula para el queso, otra para el pepperoni, y así sucesivamente. Si la pregunta se evalúa como true, la expresión se evalúa y se devuelve. Si la pregunta es false, la computadora pasará a la siguiente cláusula.
Mira la función de cost:
¿Cuántas cláusulas hay para el cost función?
Identifica la pregunta en la primera cláusula.
Identifica la pregunta en la segunda cláusula.
Square brackets enclose the question and answer for each clause. When students identify the questions, they should find the first expression within the square brackets. There can only be one expression in each answer.
- La última cláusula en una condicional puede ser una cláusula else , que se evalúa si todas las preguntas son false.
En la función de cost, ¿Qué se devuelve si todas las preguntas son falsas? ¿Qué pasaría si no hubiera otra cláusula else ? Trata de eliminar esa cláusula del código from the code y evaluar una cobertura desconocida y ve qué pasa.
else clauses are best used as a catch-all for cases that you can’t otherwise enumerate. If you can state a precise question for a clause, write the precise question instead of else. For example, if you have a function that does different things depending on whether some variable x is larger than 5, it is better for beginners to write the two questions (> x 5) and (<= x 5) rather than have the second question be else. Explicit questions make it easier to read and maintain programs.
Las funciones que usan condiciones se denominan funciones por trozos, porque cada condición define una pieza separada de la función. ¿Por qué son útiles las funciones por partes? Piensa en el jugador de tu juego: Te gustaría que el jugador se mueva de una manera si pulsas la tecla "arriba", y de otra manera si pulsas la tecla "abajo". ¡Subir y bajar necesitan dos expresiones diferentes! Sin cond, solo podrías escribir una función que siempre mueva al jugador hacia arriba, o siempre lo mueva hacia abajo, pero no ambas.
- En este momento la cláusula else produce una cadena, aunque el Rango de la función sea Number. ¿Crees que esto es un problema? ¿Por qué o por qué no? Como seres humanos, tener una salida que rompa ese contrato puede no ser un problema: sabemos que las funciones producirán el costo de una pizza o un mensaje de error. Pero, ¿Si la salida de este código no iba a los humanos en absoluto? ¿Qué pasa si queremos utilizar desde dentro de algún otro código? ¿Es posible que ese código se confunda? Para averiguarlo, descomenta la última línea del programa (start cost removiendo el punto y coma. Al hacer clic en "Ejecutar", el simulador utilizará la función de cost para ejecutar la caja registradora. ¡Mira lo que pasa si ordenas fuera del menú!
Para arreglar esto, cambiemos la cláusula else para devolver un precio muy alto. Después de todo, si el cliente está dispuesto a pagar un millón de dólares, ¡Luigi hará cualquier pizza que quieran!