Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:cc4101:tareas:2025-1:tarea2:parte1 [2025/05/11 15:24] msegurteaching:cc4101:tareas:2025-1:tarea2:parte1 [2025/05/14 16:44] (current) – [Segundo intento: alcance dinámico] dibanez
Line 25: Line 25:
 </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>
Line 51: Line 51:
 ==== 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.
Line 73: Line 73:
 "I am here" "I am here"
 </code> </code>
-  * (0.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.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.