Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| teaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/11 15:15] – created msegur | teaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/14 17:03] (current) – [3.3 Transformación a CL] dibanez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | [[teaching: | + | [[teaching: |
| ===== Parte 3. Estrategias de evaluación (2 ptos.) ===== | ===== Parte 3. Estrategias de evaluación (2 ptos.) ===== | ||
| Line 5: | Line 5: | ||
| En esta sección van a extender el lenguaje SL para que se pueda especificar la estrategia de evaluación de cada argumento si es necesario, ya sea con semántica // | En esta sección van a extender el lenguaje SL para que se pueda especificar la estrategia de evaluación de cada argumento si es necesario, ya sea con semántica // | ||
| - | La extensión de SL consiste en agregar // | + | La extensión de SL consiste en agregar // |
| + | |||
| + | Nota: '' | ||
| <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 12: | Line 14: | ||
| (result 20 ' | (result 20 ' | ||
| - | ;; Una función de tipo (lazy Num -> Num), usará evaluación lazy/ | + | ;; Una función de tipo ((lazy Num) -> Num), usará evaluación lazy/ |
| > (run-p-sl '{with {f {fun {x : {lazy Num}} -> Num : {+ x x}}} | > (run-p-sl '{with {f {fun {x : {lazy Num}} -> Num : {+ x x}}} | ||
| {f {printn 10}}}) | {f {printn 10}}}) | ||
| (result 20 ' | (result 20 ' | ||
| - | ;; Una función de tipo (name Num -> Num), usará evaluación name/ | + | ;; Una función de tipo ((name Num) -> Num), usará evaluación name/ |
| > (run-p-sl '{with {f {fun {x : {name Num}} -> Num : {+ x x}}} | > (run-p-sl '{with {f {fun {x : {name Num}} -> Num : {+ x x}}} | ||
| {f {printn 10}}}) | {f {printn 10}}}) | ||
| Line 23: | Line 25: | ||
| ;; Otro ejemplo de lazy. Note que efectivamente al evaluarla se comporta correctamente. | ;; Otro ejemplo de lazy. Note que efectivamente al evaluarla se comporta correctamente. | ||
| - | > (run-p-sl '{with {f {fun {x : {lazy Num} -> Num : 1}}} | + | > (run-p-sl '{with {f {fun {x : {lazy Num}} -> Num : 1}} |
| {f {printn 10}}}) | {f {printn 10}}}) | ||
| (result 1 ' | (result 1 ' | ||
| Line 71: | Line 73: | ||
| * (0.2 ptos) Implemente la función '' | * (0.2 ptos) Implemente la función '' | ||
| + | |||
| + | <note important> | ||
| + | La función '' | ||
| + | Por ejemplo, '' | ||
| + | '' | ||
| + | </ | ||
| + | |||
| * (0.1 ptos) Actualice '' | * (0.1 ptos) Actualice '' | ||
| - | * (0.1 ptos) Escriba tests que demuestran el buen funcionamiento del typechecker en presencia de modificadores. | ||
| ---- | ---- | ||
| Line 79: | Line 87: | ||
| Ahora que el lenguaje soporta tipos con modificadores, | Ahora que el lenguaje soporta tipos con modificadores, | ||
| - | * (1.0 pto) Modifique la función de transformación para que se apliquen los ajustes necesarios. | + | * (1.4 pto) Modifique la función de transformación para que se apliquen los ajustes necesarios. |
| - | * (0.3 ptos) Escriba tests, usando lo implementado | + | |
| + | <note important> | ||
| + | Asegúrese de realizar los ajustes apropiados | ||
| + | </ | ||
| <note tip> | <note tip> | ||
| Line 88: | Line 99: | ||
| * 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 " | + | * 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 " |
| </ | </ | ||

