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:2026-1:tarea2:parte3 [2026/05/11 15:24] – [3.3 Transformación a CL] msegurteaching:cc4101:tareas:2026-1:tarea2:parte3 [2026/05/11 15:48] (current) – [3.3 Transformación a CL] msegur
Line 88: Line 88:
 ==== 3.3 Transformación a CL ==== ==== 3.3 Transformación a 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. Nótese que el lenguaje CL no tiene distintas semánticas de evaluación: la función de transformación debe ajustar los argumentos de las funciones de tal forma que coincidan con la firma los modificadores especificados+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. Nótese que el lenguaje CL no tiene distintas semánticas de evaluación: la función de transformación debe transformar expresiones ''lazy'' del lenguaje SL en expresiones normales del lenguaje ''CL'' que sean equivalentes. 
 + 
 +Por ejemplo, si se requiere un argumento con estrategia lazy o by-name, y se usa un argumento que tiene evaluación temprana, entonces hay que ajustar la expresión de tal manera que se retrase su evaluación. Una forma de retrasar la evaluación de una expresión ''%%e%%'', es ponerla en el cuerpo de una lambda ''%%(lambda (_) e)%%''. Luego para evaluarla basta aplicar la función. Por el otro lado, si se requiere una evaluación temprana el argumento fue declarado lazy o by-name, entonces es necesario evaluarlo en ese momento.
  
 <note tip> <note tip>
 Algunas cosas que se debe tener en cuenta: Algunas cosas que se debe tener en cuenta:
-  * Si se requiere un argumento con estrategia lazy o by-name, y se usa un argumento que tiene evaluación temprana, entonces hay que ajustar la expresión de tal manera que se retrase su evaluación. 
-  * Una forma de retrasar la evaluación de una expresión ''%%e%%'', es ponerla en el cuerpo de una lambda ''%%(lambda (_) e)%%''. Luego para evaluarla basta aplicar la función. 
-  * 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. 
   * 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!   * 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!
 +  * En el caso de ''if0'', considere el caso donde las ramas tienen distintos modificadores. ¿Qué se puede hacer en ese caso?
 </note> </note>