Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc4101:tareas:2025-1:tarea2:parte1 [2025/05/11 15:24] – msegur | teaching:cc4101:tareas:2025-1:tarea2:parte1 [2025/05/14 16:44] (current) – [Segundo intento: alcance dinámico] dibanez |
---|
</code> | </code> |
| |
Por otro lado, para mantener un log les recomendamos utilizar el mecanismo de cajas de Racket ([[https://docs.racket-lang.org/reference/boxes.html|documentación]]). A continuación les proveemos una ilustración de la API de cajas, para hacer crecer una lista: | Por otro lado, para mantener un log ergonómico de usar, es necesario utilizar mutación. Para esto, les recomendamos utilizar el mecanismo de cajas de Racket ([[https://docs.racket-lang.org/reference/boxes.html|documentación]]). A continuación les proveemos una ilustración de la API de cajas, para hacer crecer una lista: |
| |
<code scheme> | <code scheme> |
==== Segundo intento: alcance dinámico ==== | ==== Segundo intento: alcance dinámico ==== |
| |
Una solución a los problemas introducidos en la parte anterior es utilizar alcance dinámico. En esta sección los guiaremos en el proceso, para el cual harán uso del mecanismo de [[https://docs.racket-lang.org/guide/parameterize.html|parametrización provisto por Racket]]. Un parámetro en Racket es una "caja", con un contenido inicial, cuyo contenido puede ser redefinido localmente, con alcance dinámico. Además, los parámetros de Racket son thread-safe. | Una solución a los problemas introducidos en la parte anterior es utilizar alcance dinámico. En esta sección los guiaremos en el proceso, para el cual harán uso del mecanismo de [[https://docs.racket-lang.org/guide/parameterize.html|parametrización provisto por Racket]]. Un parámetro en Racket es un "contenedor", con un valor inicial, cuyo contenido puede ser redefinido localmente, con alcance dinámico. Además, los parámetros de Racket son thread-safe. |
| |
Para comenzar, se utiliza la función ''make-parameter'', que permite crear un parámetro. El argumento que se pasa a ''make-parameter'' representa el valor inicial del parámetro. Note que para obtener el valor asociado al parámetro, es necesario "aplicarlo", como si fuera una función sin argumentos. | Para comenzar, se utiliza la función ''make-parameter'', que permite crear un parámetro. El argumento que se pasa a ''make-parameter'' representa el valor inicial del parámetro. Note que para obtener el valor asociado al parámetro, es necesario "aplicarlo", como si fuera una función sin argumentos. |
"I am here" | "I am here" |
</code> | </code> |
* (0.5 ptos) Modifique su intérprete para que la interpretación de ''printn'' utilice un parámetro para imprimir. Es decir, el valor inicial del parámetro debe ser la función ''println'' de Racket. | * (0.7 ptos) Modifique su intérprete para que la interpretación de ''printn'' utilice un parámetro para imprimir. Es decir, el valor inicial del parámetro debe ser la función ''println'' de Racket. |
* (1 pto) Defina una nueva función de interpretación ''interp-p'', que dada una expresión retorna un valor de tipo ''Result''. La función debe hacer uso de ''interp'', pero manteniendo un log local y redefiniendo el valor del parámetro. El nuevo valor del parámetro debe ser una función que registre impresiones en el log local. | * (1.3 ptos) Defina una nueva función de interpretación ''interp-p'', que dada una expresión retorna un valor de tipo ''Result''. La función debe hacer uso de ''interp'', pero manteniendo un log local y redefiniendo el valor del parámetro. El nuevo valor del parámetro debe ser una función que registre impresiones en el log local. |
* (0.5 ptos) Provea tests para verificar que efectivamente es capaz de corroborar la salida de las impresiones. | |
| <note important> |
| Recuerde incluir tests para la nueva función implementada ''interp-p''. |
| </note> |
| |
Ahora sí, ya debiesen ser capaces de interpretar sus expresiones en dos modalidades distintas: el modo normal, donde imprimen en pantalla, y el modo de prueba, donde registran su información en un log, lo que les permite corroborar los valores impresos. | Ahora sí, ya debiesen ser capaces de interpretar sus expresiones en dos modalidades distintas: el modo normal, donde imprimen en pantalla, y el modo de prueba, donde registran su información en un log, lo que les permite corroborar los valores impresos. |
| |
| |