Differences

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

Link to this comparison view

Next revision
Previous revision
teaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/11 15:15] – created msegurteaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/11 22:38] (current) – [3.3 Transformación a CL] msegur
Line 1: Line 1:
-[[teaching:cc4101:tareas:2024-1:tarea2|<< Volver]]+[[teaching:cc4101:tareas:2025-1:tarea2|<< Volver]]
  
 ===== Parte 3. Estrategias de evaluación (2 ptos.) ===== ===== Parte 3. Estrategias de evaluación (2 ptos.) =====
Line 6: Line 6:
  
 La extensión de SL consiste en agregar //modificadores// a los tipos declarados por las funciones funciones, los que especifican el tipo de estrategia a utilizar para los argumentos. A continuación les proveemos una ilustración de este mecanismo y qué es lo que debieran obtener al finalizar esta sección.  La extensión de SL consiste en agregar //modificadores// a los tipos declarados por las funciones funciones, los que especifican el tipo de estrategia a utilizar para los argumentos. A continuación les proveemos una ilustración de este mecanismo y qué es lo que debieran obtener al finalizar esta sección. 
 +
 +Nota: ''run-p-sl'' es similar a ''run-sl'', pero utilizando la función ''interp-p'' implementada en la parte 1.
 <code scheme> <code scheme>
 ;; Una función de tipo Num -> Num significa que se aplicará con evaluación temprana. ;; Una función de tipo Num -> Num significa que se aplicará con evaluación temprana.
Line 71: Line 73:
    
   * (0.2 ptos) Implemente la función ''compatible?'' que, dados dos tipos, determina si son compatibles, es decir, iguales sin considerar sus modificadores.   * (0.2 ptos) Implemente la función ''compatible?'' que, dados dos tipos, determina si son compatibles, es decir, iguales sin considerar sus modificadores.
 +
 +<note important>
 +La función ''compatible?'' sólo debe comprobar la compatibilidad //top-level//, es decir, fuera el modificador exterior, los tipos deben ser iguales. \\ 
 +Por ejemplo, ''{lazy Num} -> Num'' **no** es compatible con ''Num -> Num'', pero \\ 
 +''{lazy {Num -> Num}}'' sí es compatible con ''Num -> Num''.
 +</note>
 +
   * (0.1 ptos) Actualice ''type-ast'' para que considere tipos compatibles, en vez de iguales.   * (0.1 ptos) Actualice ''type-ast'' para que considere tipos compatibles, en vez de iguales.
   * (0.1 ptos) Escriba tests que demuestran el buen funcionamiento del typechecker en presencia de modificadores.   * (0.1 ptos) Escriba tests que demuestran el buen funcionamiento del typechecker en presencia de modificadores.
Line 80: Line 89:
 Ahora que el lenguaje soporta tipos con modificadores, es necesario implementar las semánticas correspondientes. Esto se va a realizar en la transformación de un programa SL a un programa CL. Ahora que el lenguaje soporta tipos con modificadores, es necesario implementar las semánticas correspondientes. Esto se va a realizar en la transformación de un programa SL a un programa CL.
   * (1.0 pto) Modifique la función de transformación para que se apliquen los ajustes necesarios.   * (1.0 pto) Modifique la función de transformación para que se apliquen los ajustes necesarios.
 +
 +<note important>
 +Asegúrese de realizar los ajustes apropiados en el caso ''if''
 +</note>
 +
   * (0.3 ptos) Escriba tests, usando lo implementado en la Parte 1, que evidencien la nueva funcionalidad. Considere todos los casos posibles (incluyendo con funciones de orden superior!).   * (0.3 ptos) Escriba tests, usando lo implementado en la Parte 1, que evidencien la nueva funcionalidad. Considere todos los casos posibles (incluyendo con funciones de orden superior!).
  
Line 88: Line 102:
   * Si se requiere una evaluación temprana y el argumento fue declarado lazy o by-name, entonces es necesario ajustarlo para que efectivamente se evalúe en ese punto.   * Si se requiere una evaluación temprana y el argumento fue declarado lazy o by-name, entonces es necesario ajustarlo para que efectivamente se evalúe en ese punto.
   * Si tanto la función como el argumento calzan en la estrategia, entonces no hay nada que hacer.   * Si tanto la función como el argumento calzan en la estrategia, entonces no hay nada que hacer.
-  * Recuerde que la diferencia entre lazy (a.k.a. by-need) y by-name es que la primera evalúa una sola vez la expresión y luego "recuerda" el valor para próximos usos. Acuérdese de lo realizado en la Parte 2 con funciones memoizadas!+  * Recuerde que la diferencia entre lazy (a.k.a. by-need) y by-name es que la primera evalúa una sola vez la expresión y luego "recuerda" el valor para próximos usos. Le puede ser útil lo realizado en la Parte 2 con funciones memoizadas!
  
 </note> </note>