Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/11 15:25] – msegur | teaching:cc4101:tareas:2025-1:tarea2:parte3 [2025/05/14 17:03] (current) – [3.3 Transformación a CL] dibanez | ||
---|---|---|---|
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 " |
</ | </ | ||